我正在尝试使用 @ResponseBody 实现 Spring Web MVC @ExceptionHandler 以返回包含验证错误的对象。(策略 E 记录在这里)。
在 Spring 3.0.x 中,有一个已确认的bug已解决,导致它无法正常工作。我使用的是 Spring 3.1.2,不应该遇到那个。
但是,我遇到了一个异常“找不到可接受的表示”。
这是一个例外:
[10/21/12 12:56:53:296 CDT] 00000045 ExceptionHand E redacted.loggi
ng.jdk14.LogWrapper error Failed to invoke @ExceptionHandler method: public
redacted.model.view.ValidationErrorResponse redacted.controller.Re
stController.handleValidationException(redacted.util.ValidationExceptio
n,javax.servlet.http.HttpServletResponse)
Originating Class/Method:redacted.web.ui.filter.AccessControlFilter.pr
ocessFilter()
org.springframework.web.HttpMediaTypeNotAccepta
bleException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessage
ConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMeth
odProcessor.java:115)
这是代码:
@ExceptionHandler(ValidationException.class)
@ResponseStatus(value = HttpStatus.PRECONDITION_FAILED)
@ResponseBody
public ValidationErrorResponse handleValidationException(ValidationException ex, HttpServletResponse response) {
List<ValidationError> errs = new LinkedList<ValidationError>();
for (ObjectError er : ex.getErrors()) {
errs.add(new ValidationError(er.getObjectName(), er.getDefaultMessage()));
}
return new ValidationErrorResponse(errs);
}
@RequestMapping(value = "/search")
@ResponseBody
public SearchResult search(@Valid @ModelAttribute SearchRequest searchRequest, BindingResult bResult) {
if (bResult.hasErrors()) {
throw new ValidationException(bResult.getAllErrors());
}
return searchService.search(searchRequest);
}
有任何想法吗?