>  기사  >  Java  >  역직렬화에 영향을 주지 않고 JSON 직렬화에서 필드를 선택적으로 제외하려면 어떻게 해야 합니까?

역직렬화에 영향을 주지 않고 JSON 직렬화에서 필드를 선택적으로 제외하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-11-24 13:28:12520검색

How Can I Selectively Exclude Fields from JSON Serialization Without Affecting Deserialization?

@JsonIgnore의 선택적 적용: 직렬화 전용 제외 처리

서버와 데이터를 교환하는 동안 사용자 개체에는 다음과 같은 민감한 정보가 포함될 수 있습니다. 직렬화 중에는 클라이언트로부터 숨겨야 합니다. 자주 사용되는 접근 방식은 민감한 속성을 숨기기 위해 @JsonIgnore 주석을 적용하는 것입니다. 그러나 이는 역직렬화를 방해하여 특정 시나리오에서 문제를 일으킬 수도 있습니다.

문제 이해

속성에 @JsonIgnore 주석을 사용하면 JSON 직렬화에 포함되지 않습니다. 그러나 역직렬화 중에(예: 사용자 계정 생성) 동일한 속성이 필요한 경우 제외가 문제가 됩니다.

@JsonIgnore를 사용한 선택적 제외

해결 방법 이 문제는 Jackson 버전에 따라 두 가지 다른 접근 방식을 취할 수 있습니다. 사용됨:

1.9 이전의 Jackson 버전:

  • Getter에서 @JsonIgnore 사용: getter 메서드에만 주석을 달면 속성이 허용됩니다. 역직렬화 중에는 포함되고 역직렬화 중에는 제외됩니다. 직렬화.

Jackson 버전 1.9 이상:

  • @JsonProperty with READ_ONLY: 주석 인수 @JsonProperty 추가 (액세스 = JsonProperty.Access.READ_ONLY) setter를 사용하면 속성이 쓰기 가능하고 직렬화 중에 제외되도록 지정할 수 있습니다.

예:

비밀번호가 있는 사용자 개체를 고려하세요. field:

@JsonIgnore
private String password;

// Setter with READ_ONLY access (Jackson 1.9 and later)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public void setPassword(String password) {
    this.password = password;
}

참고:

  • READ_ONLY를 사용하면 비밀번호가 역직렬화에만 사용됩니다.
  • 두 접근 방식 모두 검증되었으며 의도한 대로 작동합니다.

위 내용은 역직렬화에 영향을 주지 않고 JSON 직렬화에서 필드를 선택적으로 제외하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.