[SPRING] @ResponseBody를 통해 반환 할 때 DTO JSON에서 날짜 형식 변경
SPRING@ResponseBody를 통해 반환 할 때 DTO JSON에서 날짜 형식 변경
@ResponseBody가 반환 한 DTO에서 날짜 형식을 변경하기 만하면됩니다.
내 질문에 내 질문은 출력이 JSON 목록이므로 JS 및 다른 UI 기능으로보기를 사용하는 대신 우편 배달부에 인쇄합니다. JSON List 만 반환하는 것이므로 Date 객체가 아니라 JSON List를 반환하기 때문에이 항목이 아닙니다.이 항목의 확장이지만 Orika 매퍼가 범인이라고 생각하지 않습니다. @ResponseBody를 사용하여 List를 반환 할 때 날짜의 타임 스탬프 값을 얻고 있습니다.
내 사용자 정의 코드 -
@RequestMapping(value = "/my/report", method = RequestMethod.POST)
@ResponseBody
public List<OrderWsDTO> createReport() {
//stuff
return Optional.ofNullable(orderDataList)
.orElse(Collections.emptyList())
.stream()
.map(orderData -> getDataMapper().map(orderData, OrderWsDTO.class, fields))
.collect(Collectors.toList());
}
getDataMapper ()에서도 같은 문제가 발생합니다. mapAsList (orderDataList, OrderWsDTO.class, fields) :
@RequestMapping(value = "/my/report", method = RequestMethod.POST)
@ResponseBody
public List<OrderWsDTO> createReport() {
//stuff
return getDataMapper().mapAsList(orderDataList, OrderWsDTO.class, fields);
}
OrderWsDTO는 getter 및 setter가있는 DTO이고 java.util.Date 인 날짜 필드입니다. 우편 배달부에서 날짜 형식을 "날짜": "1552476861991"로 볼 수 있습니다.
List
@RequestMapping(value = "/my/report", method = RequestMethod.POST)
@ResponseBody
public OrderWsDTO createReport() {
//stuff
return getDataMapper().map(orderData, OrderWsDTO.class, fields);
}
List
날짜가 여기에 서식이 지정됩니다. de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter # marshal () 형식 : yyyy-MM-dd'T'HH : mm : ssZ 자,이 클래스를 오버라이드하는 법?
날짜를 수정하는 어댑터 목록이있는 jaxbContextFactory를 재정의 할 수 없습니다. jaxbContextFactory는 다음과 같이 보입니다.
<alias name="defaultJaxbContextFactory" alias="jaxbContextFactory"/>
<bean id="defaultJaxbContextFactory" class="de.hybris.platform.webservicescommons.jaxb.MoxyJaxbContextFactoryImpl">
<property name="wrapCollections" value="${webservicescommons.messageconverters.context.wrapCollections}" />
<property name="analysisDepth" value="${webservicescommons.messageconverters.context.analysisDepth}" />
<property name="typeAdapters" ref="jaxbTypeAdaptersList" />
<property name="subclassRegistry" ref="subclassRegistry" />
<property name="otherClasses" ref="jaxbContextClasses" />
<property name="metadataSourceFactory" ref="metadataSourceFactory" />
<property name="excludeClasses" ref ="jaxbContextFactoryExcludeClasses"/>
</bean>
내 사용자 지정 코드에서이 bean을 재정의하면 여전히 typeAdapters의 이전 값을 선택합니다. 흥미롭게도, 다른 속성을 내 사용자 지정 속성으로 대체하고 있습니다. 내 사용자 정의 재정의 bean-
<alias name="defaultJaxbContextFactory" alias="jaxbContextFactory"/>
<bean id="defaultJaxbContextFactory" class="de.hybris.platform.webservicescommons.jaxb.MoxyJaxbContextFactoryImpl">
<property name="wrapCollections" value="false" />
<property name="analysisDepth" value="30" />
<property name="typeAdapters" ref="mylist" />
<property name="subclassRegistry" ref="subclassRegistry" />
<property name="otherClasses" ref="jaxbContextClasses" />
<property name="metadataSourceFactory" ref="metadataSourceFactory" />
<property name="excludeClasses" ref ="jaxbContextFactoryExcludeClasses"/>
</bean>
<util:list id="mylist">
<value>com.myproject.mymodule.myadapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.VariableMapAdapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter</value>
</util:list>
typeAdapter의 경우 항상 값을 선택합니다.
<property name="typeAdapters">
<list>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter</value>
</list>
</property>
mycustomaddon-web-spring.xml에서 bean을 재정의하려고 시도했다.
<bean id="customJaxbContextFactory" parent="jaxbContextFactory">
<property name="metadataSourceFactory" ref="customMetadataSourceFactory" />
<property name="typeAdapters">
<list>
<value>myproject.adapters.DateAdapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter</value>
<value>de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter</value>
</list>
</property>
</bean>
acceleratoraddon / web에 맞춤 어댑터 클래스 즉 myproject.adapters.DateAdapter를 추가했습니다. 그래도 운동하지 않았다.
해결법
-
==============================
1.'jaxbContextFactory'bean은 응용 프로그램 컨텍스트에서 bean을 생성하는 'webservicescommons-spring.xml'에 정의되어 있습니다. 따라서 (customExtension) -spring.xml을 사용하여 사용자 정의 확장에서 Bean을 겹쳐 쓰면 응용 프로그램 컨텍스트에서 Bean을 대체하는 것입니다. Hybris의 컨텍스트 로딩에 대한 자세한 내용은 여기를 참조하십시오.
'jaxbContextFactory'bean은 응용 프로그램 컨텍스트에서 bean을 생성하는 'webservicescommons-spring.xml'에 정의되어 있습니다. 따라서 (customExtension) -spring.xml을 사용하여 사용자 정의 확장에서 Bean을 겹쳐 쓰면 응용 프로그램 컨텍스트에서 Bean을 대체하는 것입니다. Hybris의 컨텍스트 로딩에 대한 자세한 내용은 여기를 참조하십시오.
주석에 언급 된 typeAdapters 속성은 'jaxb-converters-spring.xml'파일에 정의 된 다른 bean에서 정의됩니다.
<bean id="customJaxbContextFactory" parent="jaxbContextFactory"> <property name="metadataSourceFactory" ref="customMetadataSourceFactory" /> <property name="typeAdapters"> <list> <value>de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter</value> <value>de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter</value> <value>de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter</value> </list> </property> </bean>
jaxb-converters-spring-xml에 정의 된 bean이 WebApplicationContext에로드되기 때문에 (customExtension) -web-spring.xml을 사용하여이 bean을 재정의해야합니다. 여기서 webSrc의 bean 및 해당 클래스를 정의 할 수 있습니다. 맞춤 확장.
from https://stackoverflow.com/questions/55141817/change-date-format-in-dto-json-on-returning-through-responsebody by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 휴식 자원 변경 경로 (0) | 2019.05.16 |
---|---|
[SPRING] Spring 배치의 jobrepository와 writer에 대한 별도의 데이터 소스 (0) | 2019.05.16 |
[SPRING] 메이븐 (Maven)은 프록시 뒤에서 항아리를 다운로드하지 않습니다. (0) | 2019.05.16 |
[SPRING] Spring 루트 컨텍스트 경로를 설정하는 방법 (0) | 2019.05.16 |
[SPRING] Java 8에서 Spring AOP가 IllegalArgumentException을 발생시킵니다. (0) | 2019.05.16 |