Spring Boot, Spring MVC JSON RequestBody: Unknown property ignored

11,669

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.

Share:
11,669
user152468
Author by

user152468

Updated on July 06, 2022

Comments

  • user152468
    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.