java Spring启动,Spring MVC JSON请求体:忽略未知属性
我们正在开发一个JSON web服务,以通过@RequestBody注释接收数据。如果请求中包含一个与反序列化bean不匹配的属性,我们希望得到HTTP 400(错误请求)响应,但该属性被忽略。以下是一个例子:
@RestController
@Slf4j
public class TestController {
@RequestMapping(method = RequestMethod.POST, value = "/query")
public void parse(@RequestBody Query query) {
log.info("Received query: {}", query.toString());
}
}
@Data
class Query {
private String from;
private String to;
}
发帖时
{ "from" : "123", "to": "456", "foo" : "bar" }
我们得到一个HTTP 200响应。在这种情况下,我们如何使SpringMVC返回HTTP400
非常感谢您的帮助或指点
请注意,这与此问题不同:How to return 400 HTTP error code when some property of a RequestBody parameter is null?
因为这个问题问的是当预期的属性不存在时如何返回400
# 1 楼答案
把这个应用起来。属性:
以下是相关文件:Customize the Jackson ObjectMapper
# 2 楼答案
你可以重新配置你的Jackson(假设你正在使用它)
ObjectMapper
以在未知属性上失败在本例中,未知属性将抛出
JsonMappingException
,您可以引入自定义异常处理程序,在本例中返回400响应# 3 楼答案
这个怎么样-
对比
我想你是在比较和和foo。所以反序列化失败了
# 4 楼答案
您可以对该作业使用验证,验证程序将检查这些字段是否为空,如果为空,spring将返回
400 error bad request
,因此以下是您的操作方法:在你的豆子里:
在你的控制器中:
在配置文件中,您应该像这样激活验证(可能您已经准备好了):