gpt4 book ai didi

java - 如果我在 Java 中使用不同的方法来设置和获取属性,为什么 objectMapper 会失败?

转载 作者:行者123 更新时间:2023-12-02 02:55:48 25 4
gpt4 key购买 nike

我有一个名为 Car 的类,它代表一个实体,它有一个属性可以让我知道汽车的门是否打开。

private int doorsOpened;
public void setDoorsOpened( val ) { this.doorsOpened = val; }
public int getDoorsOpened() { return this.doorsOpened; }

当我需要知道这一点时,我只需调用:

if (car.getDoorsOpened() != 0) {
car.startAlarm();
}
else {
car.allIsFine();
}

但是,我不想使用 getDoorsOpened() != 0 比较,因此我创建了一个名为 doorsOpened() 的新方法,它给我带来了 boolean 值:

public boolean doorsOpened() { return this.doorsOpened != 0; }

但是当我想这样做时,使用这个新方法:

String carData = objectMapper.writeValueAsString( car ); 

我得到这个异常:

Unhandled server exception: (was java.lang.NullPointerException) (through reference chain: com.desafioguerreros.artifacts.car.entities.Car["volunteer"])
com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: com.desafioguerreros.artifacts.car.entities.Car["volunteer"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:232)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:197)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:187)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:647)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:152)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:114)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:2866)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2323)

为什么?

最佳答案

首先,查看堆栈跟踪,看起来实体中的一个属性为 null 并且导致了异常。如果我的理解是正确的,如果你有一个非常规的 getter,Jackson 将忽略该字段并且不会抛出任何异常。如果您想要自定义 getter 并在序列化中包含该字段,则可以使用 @JsonProperty ,如下所示。

public class car{
private int doorsOpened;

@JsonProperty(value="doorsOpened")
public boolean doorsOpened(){
return this.doorsOpened != 0;
}

}

关于java - 如果我在 Java 中使用不同的方法来设置和获取属性,为什么 objectMapper 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43101474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com