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를 사용할 수 있지만 구성을 통해 가능한지 알고 싶습니다.
두 가지 옵션이 있습니다.
잭슨은 밭일을 하고 있다따라서 JSON에서 생략하고 싶은 필드의 getter를 삭제하기만 하면 됩니다(다른 장소에서 getter가 필요하지 않은 경우).
또는 를 사용할 수 있습니다.
@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에 대한 ONLY 및 WRITE_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도 도움이 되지 않았습니다.
작업 중, 작업 중@JsonProperty
access
속성
언급URL : https://stackoverflow.com/questions/14708386/want-to-hide-some-fields-of-an-object-that-are-being-mapped-to-json-by-jackson
'code' 카테고리의 다른 글
뷰가 열리거나 표시될 때마다 컨트롤러 기능 실행 (0) | 2023.02.08 |
---|---|
일부 알려진 필드 이름과 일부 알려지지 않은 필드 이름을 가진 JSON의 마셜 해제 (0) | 2023.02.08 |
RestSharp JSON 파라미터 게시 (0) | 2023.02.08 |
AngularJS 태그 속성 (0) | 2023.02.08 |
커스텀 투고 타입에서 모든 카테고리를 나열하는 방법 (0) | 2023.02.08 |