Я использую весной 4.1.3.RELEASESpring сообщение об ошибке отображения
У меня есть следующий вид:
<form method="GET">
<label for="employeeId">Id:</label>
<form:input path="empId" />
<input type="submit" />
</form>
Кнопка отправить отправить запрос, который будет обрабатываться следующим методом :
@RequestMapping(value="/{empId}", method=RequestMethod.GET)
public String getEmployeeById(@PathVariable @ModelAttribute String empId, BindException binding, Model model){
try{
model.addAttribute("employee", employeeDAO.getEmployeeById(Integer.valueOf(empId)));
} catch (EmptyResultDataAccessException ex) {
binding.reject("405", "Employee not found");
}
return "employeesList";
}
метод employeeDAO.getEmployeeById
бросает EmptyResultDataAccessException
, если нет сотрудника с таким идентификатором. Мне нужно отобразить сообщение об ошибке, если возникло исключение. Код, который я предоставил, не работает. Он бросает expcetion:
java.lang.IllegalStateException: An Errors/BindingResult argument is expected to be declared immediately after the model attribute, the @RequestBody or the @RequestPart arguments to which they apply: public java.lang.String com.badmitrii.EmployeeListController.getEmployeeById(java.lang.String,org.springframework.validation.BindException,org.springframework.ui.Model)
org.springframework.web.method.annotation.ErrorsMethodArgumentResolver.resolveArgument(ErrorsMethodArgumentResolver.java:64)
org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
Я пытался удалить @ModelAttribute
, но то же самое expcetion было произошло. Как решить проблему? Может быть, есть лучший способ сделать это, а не пытаться обработать исключение с классом BindingException
?
Ваш контроллер неисправен, вы не используете модель, поэтому '@ ModelAttribute' здесь не помогает,' @ PathVariable' предназначен только для URL-адреса, содержащего идентификатор, и вы отправляете его как параметр запроса. –