【发布时间】:2019-04-04 07:47:58
【问题描述】:
我在对象数组中传递一个日期参数作为请求参数,同时使用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>
接下来是 dispatcher-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 再次获得等效的日期?
我不熟悉 jackson 与 spring 的实际工作方式。
编辑
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);
不过,执行 post 时,两个序列化程序都不会被调用。
谢谢!
【问题讨论】:
标签: spring jackson spring-rest