code

Jackson이 JSON에 매핑하고 있는 개체의 일부 필드를 숨깁니다.

starcafe 2023. 2. 8. 18:08
반응형

Jackson이 JSON에 매핑하고 있는 개체의 일부 필드를 숨깁니다.

Jackson을 사용하여 JSON에 매핑하고 싶은 사용자 클래스가 있습니다.

public class User {
    private String name;
    private int age;
    private int securityCode;

    // getters and setters
}

이것을 JSON 문자열에 매핑합니다.

User user = getUserFromDatabase();

ObjectMapper mapper = new ObjectMapper();   
String json =  mapper.writeValueAsString(user);

맵을 만들고 싶지 않습니다.securityCode변수.이 필드를 무시하도록 매퍼를 설정하는 방법이 있습니까?

커스텀 데이터 맵을 작성하거나 스트리밍 API를 사용할 수 있지만 구성을 통해 가능한지 알고 싶습니다.

두 가지 옵션이 있습니다.

  1. 잭슨은 밭일을 하고 있다따라서 JSON에서 생략하고 싶은 필드의 getter를 삭제하기만 하면 됩니다(다른 장소에서 getter가 필요하지 않은 경우).

  2. 또는 를 사용할 수 있습니다.@JsonIgnore 해당 필드의 getter 메서드에 Jackson의 주석을 붙이면 결과 JSON에는 해당 키와 값의 쌍이 없습니다.

    @JsonIgnore
    public int getSecurityCode(){
       return securityCode;
    }
    

나처럼 나중에 다른 사람이 다시 검색할 수도 있기 때문에 여기에 이것을 추가하는 것입니다.이 답변은 승인된 답변의 확장입니다.

You have two options:

1. Jackson works on setters-getters of fields. So, you can just remove getter of field which you want to omit in JSON. ( If you don't need getter at other place.)

2. Or, you can use the `@JsonIgnore` [annotation of Jackson][1] on getter method of that field and you see there in no such key-value pair in resulted JSON. 

        @JsonIgnore
        public int getSecurityCode(){
           return securityCode;
        }

사실 잭슨의 새로운 버전에는 READ_가 추가되었습니다.JsonProperty에 대한 ONLYWRITE_ONLY 주석 인수.그래서 이런 것도 할 수 있어요

@JsonProperty(access = Access.WRITE_ONLY)
private String securityCode;

대신

@JsonIgnore
public int getSecurityCode(){
  return securityCode;
}

주석 클래스의 모든 속성을 수집할 수도 있습니다.

@JsonIgnoreProperties( { "applications" })
public MyClass ...

String applications;

Pojos에 주석을 붙이고 싶지 않다면 Genson을 사용할 수도 있습니다.

주석 없이 필드를 제외하는 방법은 다음과 같습니다(원하는 경우 주석을 사용할 수도 있지만 선택할 수도 있습니다).

Genson genson = new Genson.Builder().exclude("securityCode", User.class).create();
// and then
String json = genson.serialize(user);

필드 레벨:

public class User {
    private String name;
    private int age;
    @JsonIgnore
    private int securityCode;

    // getters and setters
}

클래스 레벨:

@JsonIgnoreProperties(value = { "securityCode" })
public class User {
    private String name;
    private int age;
    private int securityCode;
}

GSON을 사용하는 경우 필드/멤버 선언을 @Expose로 마크하고 GsonBuilder().excludeFieldsWithoutExposeAnnotation()을 사용해야 합니다.

서브클래스에 @Expose로 표시해야 필드가 표시되지 않습니다.

이걸 사용하세요.

   @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
   private int securityCode;

이를 통해 securityCode 값(특히 lombok @Setter를 사용하는 경우)을 설정할 수 있으며 GET 요구에 필드가 표시되지 않도록 할 수도 있습니다.

유사한 경우, 역직렬화(JSON에서 객체)가 필요하지만 직렬화(Object에서 JSON으로)는 필요 없습니다.

먼저 나는 갔다.@JsonIgnore·불필요한 재산의 시리얼화를 막았지만, 디프로젝트화도 실패했습니다.괴로운value어떤 조건이 필요하기 때문에 Atribute도 도움이 되지 않았습니다.

작업 중, 작업 중@JsonPropertyaccess속성

언급URL : https://stackoverflow.com/questions/14708386/want-to-hide-some-fields-of-an-object-that-are-being-mapped-to-json-by-jackson

반응형