Spring Boot, Spring MVC JSON RequestBody: Unknown property ignored
Solution 1
Put this into application.properties:
spring.jackson.deserialization.FAIL_ON_UNKNOWN_PROPERTIES=true
Here are the relevant docs: Customize the Jackson ObjectMapper
Solution 2
You can reconfigure your Jackson (assuming you are using it) ObjectMapper
to fail on unknown properties.
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
In this case your unknown property will throw JsonMappingException
and you can introduce custom exception handler to return in this case Response 400.
user152468
Updated on July 06, 2022Comments
-
user152468 almost 2 years
we are developing a JSON web service to receive data via the @RequestBody annotation. In case a property is included in the request that does not match with the deserialized bean, we expect an HTTP 400 (Bad request) response, but instead the property is simply ignored. Here is an example:
@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; }
When posting
{ "from" : "123", "to": "456", "foo" : "bar" }
we get a HTTP 200 response. How can we make Spring MVC return HTTP 400 in this case?
Any help or pointers are highly appreciated.
Note that this is different from this question: How to return 400 HTTP error code when some property of a RequestBody parameter is null?.
Since that question asks how to return 400 when an expected property is absent.