>Java >java지도 시간 >직렬화 및 역직렬화에 필드만 사용하도록 Jackson을 구성하려면 어떻게 해야 합니까?

직렬화 및 역직렬화에 필드만 사용하도록 Jackson을 구성하려면 어떻게 해야 합니까?

DDD
DDD원래의
2024-12-14 03:53:09313검색

How Can I Configure Jackson to Use Only Fields for Serialization and Deserialization?

직렬화 및 역직렬화에만 필드를 사용하도록 Jackson 구성

Jackson의 기본 동작에는 속성(getter 및 setter)과 직렬화용 필드를 모두 사용하는 것이 포함됩니다. JSON으로의 역직렬화. 그러나 일부 사용자는 속성을 제외하고 직렬화 구성의 유일한 소스로 필드의 우선순위를 지정하는 것을 선호할 수 있습니다.

개별 클래스에 대한 주석 기반 접근 방식

이 동작을 적용하려면 클래스별로 @JsonAutoDetect 주석을 사용할 수 있습니다.

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

이 주석은 다음에서 속성을 제외합니다. 데이터 바인딩에 필드만 사용되도록 하는 Jackson의 배려.

모든 클래스에 대한 전역 구성

각 클래스에 수동으로 주석을 적용하는 대신 다음이 가능합니다. 모든 클래스에 대해 전역적으로 이 동작을 구성합니다. 이를 달성하려면 ObjectMapper를 다음과 같이 수정해야 합니다.

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

이 구성은 기본 가시성 설정을 재정의하고 Jackson이 모든 클래스에서 직렬화 및 역직렬화에 필드만 사용하도록 지시합니다.

구성된 Mapper에 전역적으로 액세스

구성된 ObjectMapper에 전역적으로 액세스하려면, 래퍼 클래스를 사용할 수 있습니다.

public class MyGlobalMapper {
    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.setVisibility(MAPPER.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
    }

    public static ObjectMapper get() {
        return MAPPER;
    }
}

이 래퍼 클래스는 구성된 ObjectMapper를 검색하는 정적 메서드를 제공하므로 매번 다시 구성할 필요 없이 애플리케이션 전체에서 사용할 수 있습니다.

위 내용은 직렬화 및 역직렬화에 필드만 사용하도록 Jackson을 구성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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