代码之家  ›  专栏  ›  技术社区  ›  Kaigo

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

  •  0
  • Kaigo  · 技术社区  · 7 年前

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

    目前,它将尽可能地保存到数据库中,并忽略任何未映射到类的元素。这对我来说是不好的,因为我得到了坏数据,并将其传送到数据库。

    任何帮助都将不胜感激。

    另外,使用springboot数据mongodb和gson进行映射。

    谢谢

    2 回复  |  直到 7 年前
        1
  •  0
  •   batflix    7 年前

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

    由于gson没有这个功能,你也可以从下面的链接中尝试答案- Gson optional and required fields

        2
  •  0
  •   Nishant Bhardwaz    7 年前

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