【发布时间】:2016-10-15 19:11:39
【问题描述】:
所以我有一个控制器可以输入请求正文:
@RestController
@RequestMapping("/foo/bar")
public class FooBarController {
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> doTheFoo(@RequestBody MyDto dto) {
...
}
}
我有这个 FooBar:
public clas FooBar {
@JsonProperty("foo")
private String foo;
public void setFoo(String foo) { ... }
public String getFoo() { ... }
}
我已经在我的属性中设置了在未知属性上失败:
spring.jackson.deserialization.fail-on-unknown-properties: true
我还有一个处理程序来尝试捕获失败:
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(UnrecognizedPropertyException.class)
public ResponseEntity<?> handleUnrecognizedPropertyException(UnrecognizedPropertyException ex) {
...
}
}
但是当我使用未知属性(例如{"bar": "baz"})发布到我的端点时,GlobalExceptionHandler 中的任何内容都不会运行,而是返回一个普通的 400 BAD REQUEST。如何拦截未知属性异常并提供不同的响应?
【问题讨论】:
-
如果没有未知属性被发布,控制器是否正常工作?
-
这不是重点;我想返回一个自定义错误页面,而不是一个带有 400 Bad Request 的空页面。
-
我问是因为 4xx 是客户端错误请求。是因为您的帖子在控制器要求 json 时以表格形式发送吗?或者可能是其他原因,导致您的异常处理程序没有捕获指定的异常。
标签: java spring exception-handling spring-boot jackson