当字符串未映射到我要传递给它的对象时,我试图强迫gson引发异常。
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("offer")
public String postOffer(@RequestBody String jsonBody) {
Offer offer = gson.fromJson(jsonBody, Offer.class);
offerRepository.save(offer);
return offer.getId();
}
当前,它只会将所有内容保存到db中,并忽略任何未映射到该类的元素。这对我来说很不好,因为我收到的不良数据使它无法进入数据库。
任何帮助将不胜感激。
ps。使用springboot-data-mongodb和gson进行映射。
谢谢
答案 0 :(得分:1)
要实现此目的,您需要执行以下两个步骤:-
1)将Offer
类中的所有必填字段标记为@NotNull(message="your custom message")
2)添加以下类,以告知Mongo在将文档持久保存到数据库之前对其进行验证。
@Configuration
public class MongoEventValidationListener {
@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
return new ValidatingMongoEventListener(validator());
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
}
答案 1 :(得分:0)
在GSON中,您无法填写某些必填字段。 您可以在代码中处理此问题,如果变量不存在于json中,则在Offer对象中,该变量将简单地分配为null。 您可以在代码中为必填字段添加空检查,并引发自己的异常。
由于gson没有此功能,您还可以尝试从下面的链接中尝试答案- Gson optional and required fields