我想實現的Spring Web MVC @ExceptionHandler有向@ResponseBody返回包含驗證錯誤的對象。 (Strategy E documented here)。春3.1.2 MVC @ExceptionHandler與
在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);
}
任何想法?
您確實有一個「application/json」權限的Accept標頭,如果有的話,請您展示您的ValidationException的外觀。 –