【问题标题】:How can I throw mapping to object exception with gson?如何使用 gson 将映射映射到对象异常?
【发布时间】:2018-10-27 15:04:21
【问题描述】:

当字符串未映射到我传递给它的对象时,我试图强制 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();
}

目前,它只会将所有可以保存的内容保存到数据库中,并忽略任何未映射到类的元素。这对我来说很糟糕,因为我得到了错误的数据使其进入数据库。

任何帮助将不胜感激。

ps。使用 springboot-data-mongodb 和 gson 进行映射。

谢谢

【问题讨论】:

    标签: spring-boot spring-data-mongodb


    【解决方案1】:

    在 GSON 中,您不能将某些字段设为必填。 你可以在你的代码中处理这个,如果变量不存在于 json 中,那么在 Offer 对象中,该变量将被简单地分配为 null。 您可以在代码中为必填字段添加空检查并抛出您自己的异常。

    由于 gson 没有此功能,您也可以从以下链接尝试答案- Gson optional and required fields

    【讨论】:

      【解决方案2】:

      要实现这一点,您需要执行两个步骤:-
      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();
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        • 2014-11-02
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多