>Java >java지도 시간 >지연 로드된 Hibernate 객체로 인해 Jackson 직렬화 오류를 방지하는 방법은 무엇입니까?

지연 로드된 Hibernate 객체로 인해 Jackson 직렬화 오류를 방지하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-02 00:20:08754검색

How to Avoid Jackson Serialization Errors with Lazy-Loaded Hibernate Objects?

가져오지 않은 지연 객체의 Jackson 직렬화 방지

데이터 바인딩에 널리 사용되는 Java 라이브러리인 Jackson은 다음을 사용하여 객체를 직렬화할 때 문제가 발생할 수 있습니다. 게으른 가져오기 속성. 이 경우 세션에 로드되지 않은 가져오지 않은 속성으로 인해 직렬화 중에 "프록시를 초기화할 수 없음 - 세션 없음" 예외가 발생합니다.

해결책:

이 문제를 해결하려면 직렬화 중에 지연 가져오기 속성을 무시하도록 Jackson에게 알려야 합니다. 이전 버전의 Spring(3.1 이하)에서는 사용자 정의 HibernateAwareObjectMapper를 생성하고 이를 사용자 정의 MappingJackson2HttpMessageConverter에 추가하여 이를 달성했습니다.

그러나 Spring 버전 3.1.2 이상에서는 Spring이 자체 MappingJackson2HttpMessageConverter를 제공합니다. 필요한 기능이 포함되어 있습니다. 이 변환기를 구성하고 애플리케이션의 HttpMessageConverters에 추가할 수 있습니다.

구현:

Java 구성:

@Configuration
@EnableWebMvc
public class MyConfigClass extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(jacksonMessageConverter());
        super.configureMessageConverters(converters);
    }

    public MappingJackson2HttpMessageConverter jacksonMessageConverter() {
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new Hibernate4Module());

        messageConverter.setObjectMapper(mapper);
        return messageConverter;
    }

}

XML 구성:

<mvc:message-converters>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="objectMapper">
            <bean class="com.pastelstudios.json.HibernateAwareObjectMapper" />
        </property>
    </bean>
</mvc:message-converters>

Hibernate4Module을 사용하도록 MappingJackson2HttpMessageConverter를 구성하면 Jackson은 직렬화 중에 지연 가져오기 속성을 무시하도록 지시받습니다. 이렇게 하면 초기화되지 않은 프록시 문제가 해결되고 컨트롤러가 직렬화 오류 없이 사용자 개체를 반환할 수 있습니다.

위 내용은 지연 로드된 Hibernate 객체로 인해 Jackson 직렬화 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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