Запрос не обрабатывается с использованием веб-служб Jackson REST (RESTful Spring Controllers) @Переменный путь

#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 , и это должно сработать