****编辑****
根据反馈,我附上以下免责声明:
我 知道 415是正常代码,我 知道 导致它的正常情况。我正在实现的API由于某种原因指定了这个覆盖,我无法改变它,因为我无法控制它
****结束编辑****
所以我有以下内容:
@RequestMapping(method = POST, path = "/foo",
consumes = "application/json", produces = "application/json")
public ResponseEntity<Something> postFoo() {
return null;
}
当我发布没有设置Content-Type
标头的消息时,我得到了预期的415,但是我想更改它以返回406而没有任何样板代码。那可能吗?我进行了搜索和搜索,但似乎无法找到任何文档告诉我如何做到这一点。
答案 0 :(得分:-2)
415是适当的响应状态。目标服务不支持标头。 406表示&#34;不接受&#34;,只有在无效(或缺失)&#34;接受&#34;标题已提供。
您所看到的行为是正确的,您不应该做任何改变。
答案 1 :(得分:-3)
您会考虑return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE)
样板吗?
修改强>
感谢您的澄清:Spring在处理请求之前抛出异常,然后再输入处理程序方法。因此,您可以做的是更改该特定异常的默认行为。为此,请创建您自己的ResponseEntityExceptionHandler,覆盖该特定方法,如下所示:
@ControllerAdvice
public class GlobalWebExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request){
/* other processing */
return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE);
}
}
Here是一篇很好的文章。