我只想更改@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 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 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看起来像-
在我的自定义代码中覆盖此bean时,它仍在为typeAdapters选择旧值.有趣的是,它正在用我的自定义属性替换其他属性.
我的自定义覆盖的豆-
com.myproject.mymodule.myadapter
de.hybris.platform.webservicescommons.jaxb.adapters.VariableMapAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter
对于typeAdapters,它总是在选择值-
de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter
编辑3:
我尝试将mycustomaddon-web-spring.xml中的bean覆盖为-
myproject.adapters.DateAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter
我在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’中定义
de.hybris.platform.webservicescommons.jaxb.adapters.DateAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.StringMapAdapter
de.hybris.platform.webservicescommons.jaxb.adapters.XSSStringAdapter
由于jaxb-converters-spring-xml中定义的Bean已加载到WebApplicationContext中,因此您需要使用(customExtension)-web-spring.xml覆盖此Bean,您可以在其中定义Bean和相应类的websrc.您的自定义扩展名.
标签:hybris,java,spring,spring-mvc,marshalling
来源: https://codeday.me/bug/20191012/1896644.html