Java – spring MVC @ requestbody map optional
I have a rest controller for this method:
@RequestMapping(value = "",method = { RequestMethod.POST },produces = { MediaType.APPLICATION_JSON_VALUE }) public ResponseEntity<?> add(@Valid @RequestBody MyModel myModel,Errors errors) { ... return new ResponseEntity<SomeObject>(someObject,HttpStatus.OK); }
In mymodel, there is a field ismeetingorsale, which is an enumeration (meetingsaleflag):
public enum MeetingSaleFlag { MEETING("MEETING"),SALE("SALE"); private final String name; private MeetingSaleFlag(String s) { name = s; } public boolean equalsName(String otherName) { return (otherName == null) ? false : name.equals(otherName); } public String toString() { return this.name; } }
And it can map JSON with field "ismeetingorsale": "meeting"
However, the value in JSON may be "ismeetingorsale": "or completely missing, so in this case, I want to map the field to null If I change the field to optional < meetingsaleflag >
I have
So the question is how to map optional enumerations from JSON?
Solution
Thank Sotirios delimanolis for his comments. I can solve this problem
1) Add
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> </dependency>
As a dependency
2) Reconfigure the Jackson mapper Register:
@Bean @Primary public ObjectMapper jacksonObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jdk8Module()); return mapper; }
Or do this to register the jdk8 module
/** * @return Jackson jdk8 module to be registered with every bean of type * {@link ObjectMapper} */ @Bean public Module jdk8JacksonModule() { return new Jdk8Module(); }
Doing so will only register the add - on and retain the built - in Jackson configuration provided by spring boot
3) Results
Now, when the attribute is missing from the sent JSON, it will map to null (this is not so good. I expect it to give me an optional one, and I will be able to use. Ispresent()) When it is an empty string ("ismeetingorsale": ""), Jackson will return an error:
Which one looks good to me
Useful links: Jackson jdk8 module, spring MVC configure Jackson