2015-01-05 4 views
0

Я использую весной 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?

+0

Ваш контроллер неисправен, вы не используете модель, поэтому '@ ModelAttribute' здесь не помогает,' @ PathVariable' предназначен только для URL-адреса, содержащего идентификатор, и вы отправляете его как параметр запроса. –

ответ

1

Согласно детали исключения, вы должны удалить @PathVariable, используйте только @ModelAttribute.

Потому что, как за исключения BindingResult могут быть добавлены только после @RequestBody,@ModelAttribute. or @RequestPart, и здесь вы используете комбинацию двух аннотаций (@PathVariable && @ModelAttribute)

Для получения дополнительной информации: - см Source Code этой ошибки.

PS: - После того, как вы изменили, вы можете получить 400. Затем вам нужно будет изменить способ отправкис JSP.

Смежные вопросы