如果我在Java中使用不同的方法来设置和获取属性,为什么objectMapper会失败?
我有一个名为Car的类,它代表一个实体,它有一个属性,让我知道汽车是否开门如果我在Java中使用不同的方法来设置和获取属性,为什么objectMapper会失败?,java,json,string,object,jackson,Java,Json,String,Object,Jackson,我有一个名为Car的类,它代表一个实体,它有一个属性,让我知道汽车是否开门 private int doorsOpened; public void setDoorsOpened( val ) { this.doorsOpened = val; } public int getDoorsOpened() { return this.doorsOpened; } 当我需要知道这一点时,我只需打电话: if (car.getDoorsOpened() != 0) { car.startAl
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
comparison,因此我创建了一个名为doorsOpened()
的新方法,它为我带来了布尔值:
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)
为什么?首先,看到stacktrace,看起来实体中的一个属性为null,这导致了异常。如果我的理解是正确的,如果你有一个非常规的接球手,杰克逊会忽略场地,不会抛出任何异常。如果希望有一个自定义getter并在序列化中包含该字段,可以使用
@JsonProperty
,如下所示
public class car{
private int doorsOpened;
@JsonProperty(value="doorsOpened")
public boolean doorsOpened(){
return this.doorsOpened != 0;
}
}
首先,看到stacktrace,看起来实体中的一个属性为null,这导致了异常。如果我的理解是正确的,如果你有一个非常规的接球手,杰克逊会忽略场地,不会抛出任何异常。如果希望有一个自定义getter并在序列化中包含该字段,可以使用
@JsonProperty
,如下所示
public class car{
private int doorsOpened;
@JsonProperty(value="doorsOpened")
public boolean doorsOpened(){
return this.doorsOpened != 0;
}
}