Spring允许在中定义@ExceptionHandlers
。春季返回JSON HTTP 406(NOT_ACCEPTABLE)
我已经为HTTP 400,404,405,...定义了很多其他ExceptionHandlers
...但HTTP 406(NOT_ACCEPTABLE)的ExceptionHandler似乎不起作用。处理程序被触发,我检查了日志中的结果,但没有使用。
我的目标是它返回一个带有JSON主体的HTTP 406。
变1
@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
public ErrorDTO requestMethodNotSupported(final HttpMediaTypeNotAcceptableException e) {
final ErrorDTO dto = new ErrorDTO(HttpStatus.NOT_ACCEPTABLE, "http.media_not_acceptable");
return dto;
}
变2
@ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
public ResponseEntity<ErrorDTO> requestMethodNotSupported2(final HttpMediaTypeNotAcceptableException e) {
final ErrorDTO dto = new ErrorDTO(HttpStatus.NOT_ACCEPTABLE, "http.media_not_acceptable");
return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).contentType(MediaType.APPLICATION_JSON_UTF8).body(dto);
}
但我总是从Tomcat类似这样的HTML响应:
HTTP状态406 -
类型:状态报告
消息:
描述:由 该请求所标识的资源仅能够产生根据该请求“接受” 头与 特性不能接受的应答。
代替
{ “的errorCode”:406, “的errorMessage”: “http.media_not_acceptable” }
请求报头:
- 接受:申请/东西 - 即,不能待本
实际响应报头:
- 的Content-Type:text/html的
预期的 - 响应报头:
- Content-Type:application/json
我知道我可以简单地“修复”由客户端发送的Accept-Header,但是如果服务器不知道如何响应,则应该始终以JSON响应。
我使用Spring 4.3.3.RELEASE和Jackson 2.8.4。