当前位置: 首页 > 知识库问答 >
问题:

使用Jackson避免具有空字段的对象

井兴怀
2023-03-14

如果我试图反序列化一个JSON字符串,该字符串缺少object类中的一个字段,那么在创建对象时,该字段将被设置为null。当发生这种情况时,我需要Jackson抛出一个异常,这样我就不必在每个对象中实现AssertNotNullFields()方法;即JSON字符串输入必须定义了类中的所有字段,或者抛出JSONProcessingException

objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
public class LogInUser {
    public String identifier, password;
    public LogInUser() {}
}

考虑到我的配置,这是可能的吗?

共有1个答案

淳于飞文
2023-03-14

您可以尝试在LoginUser类中使用JSonCreator。当引入到您在您的问题中提出的代码中时,它看起来如下所示:

public class LogInUser {

    @JsonCreator
    public LogInUser(@JsonProperty(value = "identifier", required = true) String identifier, @JsonProperty(value = "password", required = true) String password) {
    this.identifier = identifier;
    this.password = password;
    }

    public String identifier, password;
    public LogInUser() {}

}

当一个或多个值为null时,它应该引发异常。

 类似资料:
  • Jackson序列化到JSON有一些很好的特性,比如SerializationFeature.write_null_map_values,它允许您避免将null写入序列化对象。 但是,如果我使用自定义的JsonSerializer,这个设置将被忽略,并且我被迫在对WriteStringField的所有调用中进行空检查。例如,我注册了一个自定义的JSONSerializer: 然后在ImportPr

  • 我的班级结构如下: 所有的getter和setter都已定义。我使用Java反射进行如下调用: 现在,在调用它之前,我只设置了,而没有设置。我将这个ClassAObj转换成JSON,发现的默认值设置为,它出现在JSON中。我不希望JSON中出现字段。我该如何避免这种情况? 有趣的是,如果我设置了而不是,那么标签不会出现在JSON中。

  • 我有一个错误: 我一直试图避免导致此被序列化的字段,但错误没有得到纠正。我试图把@JsonIgnore放在任何地方,在getter、setter、属性和所有可能的组合中。 谢啦 - 我无法导入com。谷歌。阿彭金。重新包装。组织。科德豪斯。杰克逊。注释JsonIgnoreProperties说,“使用com.google.appengine.repacked可能会导致你的应用程序在没有警告的情况下

  • 有一个类内部有另一个静态类。Jackson在反序列化JSON时调用setter。但某些设置器不能按预期工作。 类定义: 输出: 设置名称caled,名称=黑暗之塔

  • 我对使用Jackson还是个新手,我正在尝试遵循我的团队的模式来反序列化我们的JSON。现在我遇到了一个问题,当一个字段名与JSON属性不匹配时。 工作示例: 如果JSON属性是hasProfile,它工作得很好,但是如果是has_profile(这是我们的客户端正在编写的内容),它就不工作了,并且我得到一个错误:。我尝试向hasProfile添加JsonProperty注释,但仍然不起作用: 我

  • 我有一个产生JSON的控制器,从这个控制器,我返回一个实体对象,它由Jackson自动序列化。 现在,我想避免根据传递给控制器的参数返回一些字段。我查看了使用过滤器属性/Mixins等完成此操作的示例。但是我看到的所有示例都要求我使用对象映射器手动序列化/反序列化 Bean。有没有办法在没有手动序列化的情况下执行此操作?我的代码与此类似: 现在,根据传递给控制器的“变量”值,我想显示/隐藏MyEn