我有一个名为 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/