spring - 使用弹簧进行休息通话时,日期被转换为长
问题描述
我在对象数组中传递一个日期参数作为请求参数,同时使用RestTemplate
我的弹簧容器进行休息调用。
代码如下:
HttpEntity<SimplePipeServiceRequest> request = new HttpEntity<>(new Object[]{new Date(), 1}, headers);
response = template.postForEntity(uri1, request, String.class);
当请求到达我的服务器时,我会收到尽可能长的日期。我怎样才能得到日期作为日期?为什么来的这么久?
以下是我的 dispatcher-servlet.xml
<context:component-scan base-package="com.altra.aligne.controller"></context:component-scan>
<mvc:annotation-driven conversion-service="conversionService">
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.altra.middleware.spring.CustomObjectMapper"></bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- RequestMappingHandlerMapping.setUseSuffixPatternMatch(boolean useSuffixPatternMatch) = Whether to use suffix pattern match (".*")
when matching patterns to requests. -->
<bean class="com.altra.middleware.spring.ControllerBeanPostProcessor" />
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.altra.middleware.spring.GenericDTOConverter"/>
<bean class="com.altra.middleware.spring.StringToDateConverter"/>
</list>
</property>
</bean>
以下是调度程序-servlet.xml,我从中进行其余调用
<mvc:annotation-driven>
<mvc:message-converters>
<!-- We configure the Jackson mapper to output dates in ISO801 format. This requires adding our
customized Jackson mapper to the list of Spring MVC message converters. But, if we just add our bean here
all by itself, it will handle requests it should not handle, e.g. encoding strings. So we need to add the
other standard message converters here too, and make sure to put the customized Jackson converter AFTER the
string converter. -->
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
<ref bean="acmJacksonConverter"/>
<bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/>
<!-- atom feed requires com.sun.syndication package ... -->
<!--<bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter"/>-->
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
<bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.Jaxb2CollectionHttpMessageConverter"/>
<!-- marshalling converter requires spring oxm -->
<!--<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"/>-->
</mvc:message-converters>
</mvc:annotation-driven>
谁能解释日期在哪里以及如何转换为 long ,如果我想避免它,我可以实现它,如果我可以从 long 中再次获得等效的日期?
我不熟悉杰克逊实际上是如何与弹簧一起工作的。
编辑
HttpEntity<SimplePipeServiceRequest> request = new HttpEntity<>(AbstractGasService.createSimpleServiceRequest(serviceRequestDTO), headers);
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("GasOpsModule");
module.addSerializer(Date.class, new DateSerializer());
module.addSerializer(Object[].class, new ObjectArraySerializer());
module.addSerializer(String.class, new StringSerializer());
mapper.registerModule(module);
MappingJackson2HttpMessageConverter dateConverter = new MappingJackson2HttpMessageConverter();
dateConverter.setObjectMapper(mapper);
if(!template.getMessageConverters().contains(dateConverter)) {
template.getMessageConverters().add(dateConverter);
}
response = template.postForEntity(uri1, request, String.class);
尽管如此,执行帖子时都不会调用任何序列化程序。
谢谢 !
解决方案
您需要自定义ObjectMapper
:
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(DateFormat.getDateInstance());
mapper.setTimeZone(TimeZone.getTimeZone("UTC"));
但是如果可以的话,使用 package.json 会更安全Java 8
Time
。
有关更多信息,请查看:
推荐阅读
- javascript - jQuery删除具有特定数据属性的整个脚本
- python - Pandas diff SeriesGroupBy 比较慢
- c - 分段错误后如何获取 RIP?
- c# - c#如何将int数组转换为字符串二进制数组
- ionic3 - 如何在 ionic 中嵌入 javascript 播放器?
- sql - 具有多个参数的 Eloquent 过滤
- algorithm - Bellman-Ford 算法的部分证明
- ant - 如何使用 ANT 运行 jmeter
- r - 如何在 R 中计算 ROC 下的 AUC(插入符号、随机森林、支持向量机)
- c++ - QOpenGLWidget 不在整个小部件中渲染