필자에게는 Optional 필드가있는 Java 클래스가 있습니다. Jackson 2.8.3 (Spring 웹 4.3.3에서 호출)을 사용하여 클래스를 JSON에 직렬화했다.Jackson 직렬화 중에 Optional.empty 필드를 건너 뛰는 방법은 무엇입니까?
Optional이 비어있는 경우 serializer에서 필드를 건너 뛰고 포함 된 문자열이 있으면 serialize하는 것이 좋습니다. 나는 두 개체의 목록을 찾고 있어요 결과의 예 : 여기
[
{
"id": 1,
"foo": "bar"
},
{
"id": 2,
}
]
옵션 푸는 내가 무엇을 얻을 것은, 2
대신 ID를 가진 개체에 대한 비어 :
[
{
"id": 1,
"foo": {
"present": true
}
},
{
"id": 2,
"foo": {
"present": false
}
}
]
이것은 내가
@JsonInclude(JsonInclude.Include.NON_ABSENT)
public Optional<String> getFoo() { ...
같은 클래스에서 "바"필드에 주석을해도 결과는 워싱턴이 있습니다 y 잭슨 주석 또는 사용자 지정 직렬 변환기를 사용하여 첫 번째 목록과 같은 결과를 얻을 수 있습니까?
'선택적'을 빈 필드로 사용하는 것은 일반적으로 Bad Idea ™입니다. – biziclop
왜 이것이 문제가 있다고 생각합니까? –
그런 종류의 사용을 위해 설계되지 않았습니다. 매우 미묘한 의미 론적 차이이지만 필드의 경우 'null'은 다른 값으로 간주됩니다. 라이브러리의 API에서 메소드를 설계하는 경우, 값을 리턴하지 않을 수도 있으므로 '선택 사항'을 사용하는 것이 중요 할 수 있습니다. 자세한 내용은 [여기] (http://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555) – biziclop