use*_*468 6 java spring json jackson spring-boot
我们正在开发一个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;
}
Run Code Online (Sandbox Code Playgroud)
发布时
{ "from" : "123", "to": "456", "foo" : "bar" }
Run Code Online (Sandbox Code Playgroud)
我们得到HTTP 200响应.在这种情况下,我们如何让Spring MVC返回HTTP 400?
任何帮助或指针都非常感谢.
请注意,这与此问题不同:如果RequestBody参数的某些属性为null,如何返回400 HTTP错误代码?.
由于该问题询问如何在缺少预期财产时返回400.
我找到了答案:
把它放到application.properties中:
spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true
Run Code Online (Sandbox Code Playgroud)
以下是相关文档:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
您可以重新配置您的杰克逊(假设您正在使用它)ObjectMapper在未知属性上失败.
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的未知属性将抛出JsonMappingException ,您可以引入自定义异常处理程序以在此情况下返回Response 400.
| 归档时间: |
|
| 查看次数: |
7728 次 |
| 最近记录: |