2015-01-01 4 views
-2

는 하나의 방법은 형식 componentX()의 모든 공유 재산에 대해 생성되므로이 클래스 :Jackson이 특정 속성을 직렬화하지 못하게하는 방법은 무엇입니까? 어떤 코 틀린 클래스에 대한

public class Dog { 
    private String name; 
    private double age; 

    public Dog(@NotNull String name, @NotNull double age) { 
     // assign values 
    } 

    // Getters and setters for name and age 
    // toString(), equals(), and hashCode() 

    public String component1() { return name; } 
    public double component2() { return age; } 
} 

이 함께 놨 :

public data class Dog(public var name: String, public var age: Double) 

자바에서이 같은 동일합니다 Jackson은 각각 componentX() 메서드 getXxx() 메서드를 (비) 직렬화 대상으로 봅니다.

지금까지이 문제를 해결하는 방법은 자바로 모든 모델을 만드는 것입니다. 이는 선호하지 않습니다.

즉, componentX() 메서드를 무시하도록 ObjectMapper를 어떻게 구성 할 수 있습니까?

+0

[Jackson Module for Kotlin] (https://github.com/FasterXML/jackson-module-kotlin)의 유무에 관계없이 Kotlin의 Jackson에서이 동작을 본 적이 없습니다. 다른 원인이 있어야합니다. 수락 된 답변이이 사례를 해결하기 위해 올바르지 않습니다. 다른 대답을 검토하고 여전히 문제가 있다면'ObjectMapper'를 설정하고'writeValue' 또는 다른 방법을 사용하는 코드를 보여주십시오. 2.5.x 이전에 정말 오래된 Jackson을 사용하고 있습니까? –

답변

0

참고 : 허용 대답에 설명 @JsonFilter의세부 사항이 필요하지 않은 잭슨의 기본 동작 넘어

아무 것도 필요하지 않습니다. 현재 및 최근의 Jackson 버전을 사용하면 설명 된 것과 같은 동작이 없습니다. 경우에 따라 Google은 com.fasterxml.* 대신 org.codehaus.*으로 패키지 된 이전 버전을 표시합니다.

Jackson에서는 속성이 JavaBean 속성처럼 보이지 않으면 비 직렬화되지 않습니다. componentX은 JavaBean 속성처럼 보이지 않습니다.

원시 잭슨을 사용하는 것을 증명하는 테스트 사례이며 여기서는 Jackson Module for Kotlin과 결합하여 예상대로 작동하지만이 문제도 없습니다.

class StackOverflowTest { 
    public data class Dog(public var name: String, public var age: Double) 

    @Test public fun testSimpleDeser() { 
     val dogObj = Dog("Avi", 1.5) 
     val expectedJson = """{"name":"Avi","age":1.5}""" 

     assertEquals(expectedJson, ObjectMapper().writeValueAsString(dogObj)) 
     assertEquals(expectedJson, jacksonObjectMapper().writeValueAsString(dogObj)) 
    } 
} 

나는 잭슨과 테스트를 실행 2.6.4하지만 난 그 모든 이제 오랜 시간 동안 코 틀린에 사용 되었기 때문에 2.5.x, 2.6.x, 또는 2.7.x 중 누구도이 문제가 없다고 확신합니다.

1

맞춤식 시리얼 라이저/디시리얼라이저 외에도 @JsonFilter를 살펴보십시오. mixin을 사용하여 적용 할 수 있으며 원하는 경우 componentX로 시작하는 모든 속성을 필터링하는 등의 사용자 지정 논리를 사용할 수 있습니다.

사용자 정의 필터를 만드는 방법을 설명하는 설명서는 다음과 같습니다. http://wiki.fasterxml.com/JacksonFeatureJsonFilter 매우 간단합니다.

더 좋은 방법이 있을지 모르지만이 방법이 효과적입니다.

편집 : http://wiki.fasterxml.com/JacksonJsonViews도 확인하십시오. 이것은 무시 될 수있는 속성을 정의하는 정적 방법에 가깝습니다. 그래서 나는 이것이 당신에게 도움이 될 것이라고 생각하지 않고 필터가 아마 더 좋을 것이라고 생각합니다.

+0

고마워, 내가 살펴 봐야 해. – mattbdean

+0

이것은 최근의 잭슨과 함께,이 동작을 본 적이없는 @thatJavaNerd는 필요 없다. 다른 대답과 관련 단원 테스트를 참조하십시오. –