java-通过@ResponseBody返回时,更改DTO JSON中的日期格式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-通过@ResponseBody返回时,更改DTO JSON中的日期格式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5385字,纯文字阅读大概需要8分钟。
内容图文
![java-通过@ResponseBody返回时,更改DTO JSON中的日期格式](/upload/InfoBanner/zyjiaocheng/693/a7431cdb7de34e6c86f0237970710e62.jpg)
我只想更改@ResponseBody返回的DTO中的日期格式
我的问题不是this question,因为我的输出是一个JSON列表,我将其打印在Postman上,而不是使用具有JS和其他UI功能的视图.
它也不是this one,因为我返回的是JSON列表,而不仅仅是Date对象,它是this one的扩展,但我认为Orika映射器不是罪魁祸首.
我在使用@ResponseBody返回列表时获得日期的时间戳值.
我的自定义代码-
@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());
}
The mapper is:
map:162, ConfigurableMapper (ma.glasnost.orika.impl)
与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.
在邮递员中,我可以看到日期格式为:“ date”:“ 1552476861991”
相同的确切调用返回OrderWsDTO而不是List< OrderWsDTO>.更改日期格式.它将日期打印为2019-03-13T12:10:05 0000,其格式为:yyy-MM-dd’T’HH:mm:ss.SSXXX
@RequestMapping(value = "/my/report", method = RequestMethod.POST)
@ResponseBody
public OrderWsDTO createReport() {
//stuff
return getDataMapper().map(orderData, OrderWsDTO.class, fields);
}
为什么在以List< DTO>打印时日期显示两种不同的格式?和DTO?
另外,它在哪里获取格式:yyy-MM-dd’T’HH:mm:ss.SSXXX?
编辑1:
日期在这里被格式化:
de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter#marshal()格式:yyyy-MM-dd’T’HH:mm:ssZ
现在,如何重写此类?
编辑2:
我无法覆盖具有修改日期的适配器列表的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选择旧值.有趣的是,它正在用我的自定义属性替换其他属性.
我的自定义覆盖的豆-
<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>
对于typeAdapters,它总是在选择值-
<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>
编辑3:
我尝试将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.
虽然没有解决.
解决方法:
首先在“ webservicescommons-spring.xml”中定义“ jaxbContextFactory” bean,该bean在应用程序上下文中创建该bean.因此,当您使用(customExtension)-spring.xml在自定义扩展中覆盖bean时,它只是在应用程序上下文中覆盖bean.有关在Hybris中加载上下文的更多信息,请参见here.
您注释中提到的typeAdapters属性是在另一个bean中定义的,该bean在’jaxb-converters-spring.xml’中定义
<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,您可以在其中定义Bean和相应类的websrc.您的自定义扩展名.
内容总结
以上是互联网集市为您收集整理的java-通过@ResponseBody返回时,更改DTO JSON中的日期格式全部内容,希望文章能够帮你解决java-通过@ResponseBody返回时,更改DTO JSON中的日期格式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。