스택큐힙리스트

시리얼화 중에만 @JsonIgnore를 사용하고 역직렬화 중에는 사용하지 않습니다. 본문

카테고리 없음

시리얼화 중에만 @JsonIgnore를 사용하고 역직렬화 중에는 사용하지 않습니다.

스택큐힙리스트 2023. 10. 27. 12:44
반응형

서버로부터 전송되는 사용자 객체가 있습니다. 사용자 객체를 전송할 때 패스워드가 클라이언트에게 전송되지 않도록 하고 싶습니다. 따라서 패스워드 속성에 @JsonIgnore를 추가했지만, 이 때문에 패스워드가 역직렬화되지 못해 사용자의 가입이 어려워지는 문제가 발생합니다.


@JsonIgnore를 직렬화에만 적용하고 역직렬화에는 적용하지 않을 수 있는 방법은 무엇인가요? Spring JSONView를 사용하고 있으므로 ObjectMapper에 대한 많은 제어권이 없습니다.


시도해 본 방법:



  1. 속성에 @JsonIgnore 추가

  2. getter 메소드에만 @JsonIgnore 추가

답변 1

어떻게 이를 수행하는지는 사용중인 Jackson 버전에 따라 다르게 달라집니다. 이것은 버전 1.9부터 변경되었으며, 이전에는 getter에 @JsonIgnore를 추가하여 할 수 있었습니다.


이렇게 시도해 본 적이 있습니다:



getter 메서드에 @JsonIgnore 추가



이렇게 하면 JSON password 필드 이름을 객체의 password에 대한 setter 메서드에 특정한 @JsonProperty 주석을 추가해야 합니다.


JSON의 최신 버전들에서는 JsonProperty에 대해 READ_ONLYWRITE_ONLY 주석 인자를 추가했습니다. 따라서 다음과 같은 작업도 할 수 있습니다:


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

문서는 여기에서 찾을 수 있습니다.

답변 2

@JsonIgnore이 (JSON 직렬화)과 관련된 주제에 대해 추론하고 있는 가장 중요한 것은 직렬화와 역직렬화의 차이점입니다. 직렬화는 객체를 데이터 스트림으로 변환하는 과정을 말하며, 역직렬화는 데이터 스트림에서 객체로 변환하는 과정입니다. @JsonIgnore를 사용하면 직렬화 중에 해당 필드를 무시할 수 있습니다. 그러나 역직렬화 중에는 해당 필드가 다시 복원되기 때문에 무시되지 않습니다.
JSON 직렬화를 통해 객체를 JSON 형식으로 변환할 때, 객체에 어노테이션 @JsonIgnore를 사용하면 해당 필드는 무시됩니다. 이는 불필요한 정보가 포함되지 않도록 객체를 깔끔하게 유지하는 데 도움이 됩니다. 예를 들어, 개인 정보를 포함하는 필드를 @JsonIgnore로 표시하면 직렬화 중에 해당 필드가 제외되어 개인 정보를 다른 사람들에게 노출시키지 않습니다. 이는 보안 측면에서 중요한 이점입니다.
그러나 역직렬화 중에는 @JsonIgnore가 무시되어 해당 필드가 다시 복원됩니다. JSON 데이터를 기반으로 객체를 만들 때, JSON에 해당 정보가 포함되어 있는 경우 해당 필드가 복원됩니다. 이는 JSON 데이터를 역직렬화하여 객체를 다시 생성하고, 필요한 정보를 사용할 수 있는 유연성을 제공합니다. 자세한 설명을 들기 위해 예를 들어보겠습니다.
고객 정보를 포함하는 Customer 클래스가 있다고 가정해봅시다. Customer 클래스에는 이름, 전화 번호, 이메일 주소 등의 필드가 있습니다. 그러나 이메일 필드를 민감한 개인 정보로 간주하여 @JsonIgnore를 사용하여 직렬화 중에 무시할 수 있습니다. 이렇게하면 JSON 데이터에서 개인 정보가 제외되고, 보안 상의 이점을 얻을 수 있습니다. 그러나 역직렬화를 위해 JSON 데이터를 사용하여 객체를 다시 만들면 모든 필드가 복원되고 필요한 정보를 사용할 수 있게 됩니다.
이러한 방식은 비즈니스 처리에 유용합니다. 예를 들어, 고객 정보를 관리하는 웹 애플리케이션에서는 직렬화된 JSON 데이터를 수신하고 역직렬화하여 객체로 변환합니다. 이 과정에서 @JsonIgnore를 사용하여 민감한 정보를 컨트롤할 수 있습니다. 그러나 필요에 따라 이메일 정보를 다시 사용할 수 있습니다. 이는 보안과 유연성을 동시에 보장하는 데 도움이 됩니다.
결론적으로, @JsonIgnore는 직렬화 중에 필드를 무시하는 데 유용한 어노테이션입니다. JSON 데이터를 기반으로 객체를 생성하는 역직렬화 시에는 필드를 복원하여 필요한 정보를 사용할 수 있는 유연성을 제공합니다. 이러한 방식은 보안 상의 이점과 비즈니스 처리의 편의성을 제공하며, JSON 데이터의 안전한 전환을 보장합니다. 이러한 이유로 @JsonIgnore는 개발자들이 JSON 직렬화 및 역직렬화 작업을 수행할 때 고려해야할 중요한 도구입니다.

반응형
Comments