[SPRING] Java Spring Jackson 날짜 직렬화
SPRINGJava Spring Jackson 날짜 직렬화
JSON de / serialization을 위해 Spring MVC와 Jackson을 사용하고 있습니다. 하지만 인스턴트 메시지에 문제가있다.
기본적으로 Jackson은 날짜를 에포크로 직렬화합니다. 하지만 ISO 날짜 (즉, 06-10-2011 11:00:00)로 직렬화하려고합니다.
아래 코드는 내 스프링 구성이지만 작동하지 않습니다. 그것은 여전히 시대를 되돌리고 있습니다.
그래서 제 질문은, 어떻게 비 연속성 날짜로 직렬화 할 수 있습니까?
<!-- JSON -->
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
<property name="objectMapper" ref="jacksonObjectMapper" />
</bean>
<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
<bean id="jacksonSerializationConfig" class="org.codehaus.jackson.map.SerializationConfig" factory-bean="jacksonObjectMapper" factory-method="getSerializationConfig" />
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="jacksonSerializationConfig" />
<property name="targetMethod" value="setSerializationInclusion" />
<property name="arguments">
<list>
<value type="org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion">NON_NULL</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="jacksonSerializationConfig" />
<property name="targetMethod" value="setDateFormat" />
<property name="arguments">
<list>
<value type="java.text.SimpleDateFormat">yyyy-MM-dd'T'HH:mm:ss.SSSZ</value>
</list>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="jacksonSerializationConfig" />
<property name="targetMethod" value="enable" />
<property name="arguments">
<list>
<value type="org.codehaus.jackson.map.SerializationConfig.Feature">WRITE_DATES_AS_TIMESTAMPS</value>
</list>
</property>
</bean>
해결법
-
==============================
1.Spring 3.1에서이 작업을 수행하는 훨씬 간단한 방법.
Spring 3.1에서이 작업을 수행하는 훨씬 간단한 방법.
public class CustomObjectMapper extends ObjectMapper { public CustomObjectMapper() { configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); setDateFormat(new ISO8601DateFormat()); } }
그런 다음이를 bean으로 등록하고 mvc : annotation-driven 요소를 사용자 정의하십시오.
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="customObjectMapper"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="customObjectMapper" class="CustomObjectMapper"/>
-
==============================
2.나에게 적합한 Spring 3.1.3 및 Jackson 2.1.0을 사용하는 솔루션 (Java 코드 "SerializationConfig.Feature"-> "SerializationFeature"의 추가 변경 사항이있는 Ryans 응답 및 Kornys 노트를 기반으로 함)
나에게 적합한 Spring 3.1.3 및 Jackson 2.1.0을 사용하는 솔루션 (Java 코드 "SerializationConfig.Feature"-> "SerializationFeature"의 추가 변경 사항이있는 Ryans 응답 및 Kornys 노트를 기반으로 함)
public class DateObjectMapper extends ObjectMapper { public DateObjectMapper() { configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); }
구성 :
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="dateObjectMapper"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="dateObjectMapper" class="DateObjectMapper"/>
-
==============================
3.스프링 플랫폼 2.0 (스프링 4.2)과 잭슨 2.6.3
스프링 플랫폼 2.0 (스프링 4.2)과 잭슨 2.6.3
Pom.hml
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-joda</artifactId> </dependency>
applicationContext.xml
<mvc:annotation-driven> <mvc:message-converters> <beans:bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <beans:property name="objectMapper"> <beans:bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <beans:property name="featuresToDisable"> <beans:array> <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS"/> </beans:array> </beans:property> </beans:bean> </beans:property> </beans:bean> </mvc:message-converters> </mvc:annotation-driven>
-
==============================
4.내 문제를 해결했습니다. 그래서 비슷한 문제를 가진 다른 사람들을 참조하십시오.
내 문제를 해결했습니다. 그래서 비슷한 문제를 가진 다른 사람들을 참조하십시오.
Spring 컨텍스트 config xml에서 다음 요소를 삭제했습니다.
<mvc:annotation-driven/>
과
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonSerializationConfig" /> <property name="targetMethod" value="setDateFormat" /> <property name="arguments"> <list> <value type="java.text.SimpleDateFormat">yyyy-MM-dd'T'HH:mm:ss.SSSZ</value> </list> </property>
그런 다음 다음을 추가했습니다.
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="order" value="1" /> </bean>
다음을 변경했습니다.
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonSerializationConfig" /> <property name="targetMethod" value="enable" /> <property name="arguments"> <list> <value type="org.codehaus.jackson.map.SerializationConfig.Feature">WRITE_DATES_AS_TIMESTAMPS</value> </list> </property>
...에서
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetObject" ref="jacksonSerializationConfig" /> <property name="targetMethod" value="disable" /> <property name="arguments"> <list> <value type="org.codehaus.jackson.map.SerializationConfig.Feature">WRITE_DATES_AS_TIMESTAMPS</value> </list> </property>
이 봄 이후로 나는 ISO 날짜로 json으로 나의 날짜를 직렬화 할 수 있었다.
from https://stackoverflow.com/questions/7672211/java-spring-jackons-date-serialization by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 생성자가 예외를 던졌습니다. 중첩 예외는 java.lang.NoClassDefFoundError입니다. javax / servlet / ServletContext (0) | 2019.04.21 |
---|---|
[SPRING] spring javaconfig, xml config 및 주석 간의 성능 차이 (0) | 2019.04.21 |
[SPRING] JavaConfig에서 http "security = 'none'을 어떻게 정의합니까? (0) | 2019.04.21 |
[SPRING] mongo 사용자 정의 변환기를 사용하지 않는 Spring (0) | 2019.04.21 |
[SPRING] 스프링 어플리케이션에 각도를 삽입하여 서빙을 실행할 때 스프링 컨트롤러에 액세스 (0) | 2019.04.21 |