如何使用gson向对象异常抛出映射?

时间:2018-10-27 15:04:22

标签: spring-boot spring-data-mongodb

当字符串未映射到我要传递给它的对象时,我试图强迫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进行映射。

谢谢

2 个答案:

答案 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