2017-03-29 1 views
0

엔티티를 나타내는 Car라는 클래스가 있는데, 자동차에 문을 열 었는지 여부를 알려주는 속성이 있습니다. 내가 가져다 doorsOpened()라는 새로운 방법을 만들어 그 이유 getDoorsOpened() != 0 비교를 사용하지 않으려는,Java에서 속성을 설정하고 가져 오기 위해 다른 메서드를 추가하면 objectMapper가 실패하는 이유는 무엇입니까?

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

을하지만 : 알아요해야하는 경우

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

, 단순히 전화 나 부울 값 :

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

하지만이하고 싶은이 새로운 방법 :

,536을

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) 

이유 :

String carData = objectMapper.writeValueAsString(car); 

나는이 예외가?

답변

2

우선 stacktrace를 보면 엔티티의 속성 중 하나가 null이며 예외를 발생시키고있는 것처럼 보입니다. 나의 이해가 정확하다면, 평범하지 않은 게터를 가지고 있다면 Jackson은 단지 필드를 무시하고 예외를 던지지 않을 것입니다. 사용자 정의 getter를 사용하여 해당 필드를 직렬화에 포함하려면 다음과 같이 @JsonProperty을 사용할 수 있습니다.

public class car{ 
    private int doorsOpened; 

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

}