java – Spring MVC @RequestBody map可选
我有一个这个方法的休息控制器:
@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); } 在MyModel中有一个字段isMeetingOrSale,它是枚举(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; } } 并且它可以映射具有字段“isMeetingOrSale”的json:“MEETING” 但是json中的值可能是“isMeetingOrSale”:“”或完全丢失,因此在这种情况下我希望将字段映射为null.如果我将字段更改为可选< MeetingSaleFlag> 我有
所以问题是如何从json映射可选枚举? 解决方法
感谢Sotirios Delimanolis的评论,我能够解决这个问题.
1)添加 <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> </dependency> 作为依赖. 2)重新配置Jackson映射器.寄存器: @Bean @Primary public ObjectMapper jacksonObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Jdk8Module()); return mapper; } 或者这样做以注册jdk8模块 /** * @return Jackson jdk8 module to be registered with every bean of type * {@link ObjectMapper} */ @Bean public Module jdk8JacksonModule() { return new Jdk8Module(); }
这样做只会注册附加模块并保留Spring Boot提供的内置Jackson配置. 3)结果 现在,当发送的json中缺少该属性时,它将映射为null
哪个看起来对我好. 有用的链接:Jackson jdk8 module,Spring MVC configure Jackson (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |