使用 Optional 管理我的 Hibernate POJO NullPointerException

Managing My Hibernate POJO NullPointerException Using Optional

提问人:Adam Obaidi 提问时间:9/27/2021 最后编辑:João DiasAdam Obaidi 更新时间:9/27/2021 访问量:89

问:

嗨,大家好,我对将 Optional 与 Java POJO Hibernate 一起使用有点困惑。作为我们总是抱怨的 Java 开发人员,您需要在访问该字段之前检查 null。 我读过一些关于这个问题的帖子,但无法掌握它。 问题是,如果我们正在构建一个 restful API,我们正在处理 JSON,因此我们必须使用 jackson-datatype-jdk8 来支持。但是实现看起来有点不像我想象的那么干净。NullPointerExceptionOptional

首先,我们需要在注册 ObjectMapper 时注册 JDK8:

private ObjectMapper registerJdkModuleAndGetMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    Jdk8Module module = new Jdk8Module();
    module.configureAbsentsAsNulls(true);
    objectMapper.registerModule(module);
    return objectMapper;
}

其次,我们必须在实例 varObj 构造函数上使用注解:@JsonProperty

public Person(
    @JsonProperty("firstName") String firstName,
    @JsonProperty("lastName") String lastName,
    @JsonProperty("age") int age,
    @JsonProperty("address") Optional<Address> address,
    @JsonProperty("phone") Optional<String> phone) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.age = age;
  this.address = address;
  this.phone = phone;
}

作为中级程序员,我们总是寻求前辈的帮助和提示。谁能帮帮我?非常感谢

json spring nullpointerexception 选项类型

评论

2赞 bananas 9/27/2021
我不确定是否推荐它,基本上您正在添加包装器,这是内部实现。为任何对象获取 null 都取决于设计,同样,这应该通过 db 处理,即使用非 null 约束。但我想听到更多关于这方面的信息
0赞 Adam Obaidi 9/27/2021
没错,这就是我们作为数据库管理员将 NotNull 添加到数据库字段所需要的,这将阻止对数据库进行任何 NULL 输入。

答:

-1赞 João Dias 9/27/2021 #1

注册是强制性的,因此没有解决方法。Jdk8Module

关于 ,您可以删除它们,因为 Java 属性的名称与您在 中的配置完全相同。@JsonProperty@JsonProperty

评论

0赞 bananas 9/29/2021
-1 因为你也可以通过 DTO 曝光,所以请添加为什么他可能有其他计划,比如他通过其他媒体曝光(另一个话题)
0赞 João Dias 9/29/2021
对不起,但你的评论是什么意思?我不明白 DTO 如何解决所讨论的主题。而且我也不明白你的“请补充一下,为什么他可能有其他计划,比如他通过其他媒体曝光(另一个话题)”的说法。你能解释一下吗?谢谢。