2016-07-12 5 views
0

나는 jackosn을 사용하여 POJO를 직렬화하고 있으며, 사용자가 null인지 여부에 관계없이 사용자가 값을 설정하는 모든 값을 직렬화에 포함해야합니다. 그래서 현재Jackson은 사용자가 null을 포함합니까?

:

POJO :

현재
public class YourItem { 
    public String key; 
    public String item; 
} 

때 사용자가 수행합니다

YourItem item = new YourItem(); 
item.setKey("abc"); 

직렬화가 제공 :

{ 

     "key" : "abc" 
} 

내가구성으로as objectMapper.setInclude(Include.NON_NULL)

그러나 사용자가 특별히 setter를 호출하고 값을 null로 설정하면 해당 항목을 내 직렬화 된 문자열에 넣으려고합니다. 는 사용자가 내가 serialzation에서 원하는

YourItem item = new YourItem(); 
    item.setKey("abc"); 
    item.setItem(null); 

를 않도록 경우 키와 항목 값을 모두 같은 존재 :

{ 

    "key" : "abc", 
    "item" : null 

} 

어떻게 널 설정 사용자와 기본 널 (null)을 구별 않습니다. ObjectMapper에 구성이 있습니까 ??

+0

분명히 어딘가에 복제본이 있지만 'NON_DEFAULT'을 (를) 사용해보십시오. –

+0

@SotiriosDelimanolis :'NON_DEFAULT'을 시도했지만 차이는 없습니다. 사용자가 설정 한 null 값은 생략되었습니다 –

+0

원하는 것을 원하지 않습니까? –

답변

1

어떤 사람들은

그렇게 무시하면 (예를 들어이 책 클린 코드) 나쁜 관행으로 널 (null) 사용을 고려, 기본 초기화 널 (null)과 사용자가 설정 한 언어 디자인에 널 (null)

구별 할 수 없습니다

필드에 setter가 액세스했는지 추적하는 일종의 상태가 필요합니다. setter에 의해 액세스되지 않고 null 인 경우는 그것을 무시합니다. 이 작업을 수행하는

한 가지 방법은 런타임 동안 필드를 직렬화하기위한 다양한 조건을 정의 할 수 있습니다 잭슨 필터,이다 (당신의 세터 액세스 상태 필드는 사용자가 설정되었음을 나타냅니다 있다는 것을 당신의 상태)

http://www.baeldung.com/jackson-serialize-field-custom-criteria