program story

Jackson을 사용한 직렬화의 특정 필드 무시

inputbox 2020. 12. 25. 09:43
반응형

Jackson을 사용한 직렬화의 특정 필드 무시


Jackson 라이브러리를 사용하고 있습니다.

직렬화 / 역 직렬화 할 때 특정 필드를 무시하고 싶습니다. 예를 들면 다음과 같습니다.

public static class Foo {
    public String foo = "a";
    public String bar = "b";

    @JsonIgnore
    public String foobar = "c";
}

나에게 줄 것 :

{
foo: "a",
bar: "b",
}

그러나 나는 얻는다 :

{
foo: "a",
bar: "b",
foobar: "c"
}

이 코드로 개체를 직렬화하고 있습니다.

ObjectMapper mapper = new ObjectMapper();
String out = mapper.writeValueAsString(new Foo());

내 클래스의 실제 필드 유형은 Log4J Logger 클래스의 인스턴스입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?


좋아, 그래서 어떤 이유로 나는 이 대답을 놓쳤습니다 .

다음 코드는 예상대로 작동합니다.

@JsonIgnoreProperties({"foobar"})
public static class Foo {
    public String foo = "a";
    public String bar = "b";

    public String foobar = "c";
}

//Test code
ObjectMapper mapper = new ObjectMapper();
Foo foo = new Foo();
foo.foobar = "foobar";
foo.foo = "Foo";
String out = mapper.writeValueAsString(foo);
Foo f = mapper.readValue(out, Foo.class);

또한 주목할 가치가있는 것은 DeserializationFeature를 사용하는이 솔루션입니다 : https://stackoverflow.com/a/18850479/1256179


에서 참조 나는 소스 코드에 대한 제어를 갖고 있지 않은 어떻게 내가 속성을 무시 잭슨을 알 수 있습니까?

Jackson Mixins를 사용할 수 있습니다. 예를 들면 :

class YourClass {
  public int ignoreThis() { return 0; }    
}

이 Mixin으로

abstract class MixIn {
  @JsonIgnore abstract int ignoreThis(); // we don't need it!  
}

이것으로 :

objectMapper.addMixIn(YourClass.class, MixIn.class);

ReferenceURL : https://stackoverflow.com/questions/8718349/ignore-specific-field-on-serialization-with-jackson

반응형