왜 잭슨도 임시 멤버를 연재하는 거죠?
Jackson 2.1.4를 사용하여 JSON에 POJO를 serialize 하는데, 특정 필드가 serialize 되는 것은 무시하고 싶습니다.일시적 요소를 사용했지만 여전히 해당 요소를 직렬화하고 있습니다.
public class TestElement {
int x;
private transient String y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
}
다음과 같이 연재합니다.
public static void main(String[] args) throws JsonProcessingException {
TestElement testElement = new TestElement();
testElement.setX(10);
testElement.setY("adasd");
ObjectMapper om = new ObjectMapper();
String serialized = om.writeValueAsString(testElement);
System.err.println(serialized);
}
제안하지 마세요.@JsonIgnore
내 모델을 잭슨 특유의 주석과 연관짓고 싶지 않기 때문이다.임시로만 할 수 있나요?오브젝트 맵퍼에 가시성 설정을 위한 API가 있습니까?
잭슨이 왜 이 영화를 연재하는지는transient
member는 멤버 자체가 아니라 getters를 사용하여 시리얼화할 대상을 결정하기 때문입니다.y
공개 게터를 가지고 있고, 그게 연재됩니다.기본값을 변경하고 Jackson이 필드를 사용하도록 하려면 다음 작업을 수행하십시오.
om.setVisibilityChecker(
om.getSerializationConfig()
.getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
);
시리얼라이제이션 시 속성을 무시하는 또 다른 방법은 클래스에서 직접 수행하는 것입니다.
@JsonIgnoreProperties(value = { "y" })
public class TestElement {
...
또 다른 방법은 현장에서 직접 확인할 수 있습니다.
public class TestElement {
@JsonIgnore
private String y;
...
이게 도움이 됐으면 좋겠다.
잭슨의 시리얼화와 역직렬화를 막는 새로운 방법은mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true)
.
스프링 속성을 사용하여 구성할 수 있습니다.
spring.jackson.mapper.propagate-transient-marker=true
코멘트를 할 수 없기 때문에 여기서 이전 응답을 완료하고 권장되지 않는 메서드를 변경합니다.setVisibilityChecker
불란에 대해 누락된 절을 추가합니다.
mapper.setVisibility(
mapper.getSerializationConfig().
getDefaultVisibilityChecker().
withFieldVisibility(JsonAutoDetect.Visibility.ANY).
withGetterVisibility(JsonAutoDetect.Visibility.NONE).
withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
);
언급URL : https://stackoverflow.com/questions/21745593/why-jackson-is-serializing-transient-member-also
'code' 카테고리의 다른 글
Font Awesome 5는 리액트에 소셜/브랜드 아이콘을 사용합니다. (0) | 2023.03.19 |
---|---|
루트를 기준으로 디렉티브 templateUrl을 기술하고 있습니다. (0) | 2023.03.19 |
이스케이프된 JSON 문자열을 수정하는 방법(JavaScript) (0) | 2023.03.19 |
servlet과 servlet의 차이점은 무엇입니까? (0) | 2023.03.19 |
Wordpress는 관리자에게 네이티브 날짜 선택 기능을 제공합니까? (0) | 2023.03.19 |