티스토리 뷰

experiences

ObjectMapper에 관하여

lingi04 2021. 12. 21. 17:54

ObjectMapper 설정

Spring에서 설정

모르는 필드에 대해서 Deserialize 할 때 무시하도록 설정을 했어야 했다. 인터넷 글을 검색해가며 ObjectMapper의 Global 설정 방법을 찾아봤지만 막상 적용했을 때 제대로 동작하는게 없었다.
SpringBoot를 주로 사용했어서 xml로 bean을 설정하는 방법에 익숙하지 않아서 많이 헤맸었다.

옆에 계신 분의 도움으로 설정할 수 있었다.

설정 파일을 보면

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean primary="true" class="com.custom.objectMapper.config.dir.HibernateAwareObjectMapper" />
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

이렇게 ObjectMapper 관련 설정이 HibernateAwareObjectMapper에 있는 것을 알 수 있었고,

public class HibernateAwareObjectMapper extends ObjectMapper {

    private static final long serialVersionUID = 2293078232819971861L;

    // objectMapper를 hibernate4module 사용
    public HibernateAwareObjectMapper() {
        Hibernate4Module hm = new Hibernate4Module();
        // @transient 를 serialize 하지 않는 설정을 방지.
        hm.disable(Feature.USE_TRANSIENT_ANNOTATION);
        registerModule(hm);
    }
}

소스는 요로코롬 생겼다.

public class HibernateAwareObjectMapper extends ObjectMapper {

    private static final long serialVersionUID = 2293078232819971861L;

    // objectMapper를 hibernate4module 사용
    public HibernateAwareObjectMapper() {
        ...

        this.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }
}

이렇게 설정을 추가하였고, 테스트 결과 제대로 동작하는 것을 확인하였다.

ObjectMapper는 ThreadSafe한가?

링크를 보면

package com.fasterxml.jackson.databind;

import ...

/**
 * ObjectMapper provides functionality for reading and writing JSON,
 * either to and from basic POJOs (Plain Old Java Objects), or to and from
 * ...
 *<p> 
 * Mapper instances are fully thread-safe as of Jackson 3.0.
 *<p>
 * ...
 */
public class ObjectMapper
    implements TreeCodec, Versioned,
        java.io.Serializable
{
    ...
}

Jackson 3.0. 부터 완전히 thread-safe 하다고 한다!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday