#java #spring #spring-boot #spring-mvc
#java #весна #пружинный ботинок #spring-mvc
Вопрос:
Я получил эту ошибку, когда работал с веб-службами Jackson REST (RESTful Spring Controllers) @Переменный путь.
@Controller
@RequestMapping("/api")
public class EmployeeRestControllerImpl{
@GetMapping("/employeeList/{empId}")
public @ResponseBody
ResponseMessage getEmployeeListById(@PathVariable int empId){
.....
System.out.println(employees.get(empId));
.....
}
}
сотрудники: [{"firstName":"ABC","lastName":"ABC"},{"firstName":"XYZ","lastName":"XYZ"},{"firstName":"DEF","lastName":"DEF"}]
Исключение:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'empId' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Нужно ли менять примитивный тип на объект-оболочку.. почему? Помогите мне разобраться.Заранее благодарю..
Ответ №1:
- Ошибка очень специфична
org.springframework.web.util.NestedServletException: ошибка обработки запроса; вложенным исключением является java.lang.IllegalStateException: Необязательный параметр int ‘EmpID’ присутствует, но не может быть преобразован в нулевое значение из-за того, что он объявлен как примитивный тип. Рассмотрите возможность объявления его как объектной оболочки для соответствующего примитивного типа.
Кажется, вы запрашиваете API без какого
empId
-либо, следовательно, нулевого значения для переменной path. В сообщении об ошибке говорится, что если вы хотите поддерживать значение null, то вместо примитивнойint
переменной объекты-оболочки пользователя, такие какInteger
как
@GetMapping("/employeeList/{empId}")
public @ResponseBody ResponseMessage getEmployeeListById(@PathVariable Integer empId)
- Попробуйте передать правильный EmpID в запросе
http://localhost:8080/api/employeeList/123
, и это должно сработать