Дата конвертируется в Long во время вызова покоя с помощью весны. - PullRequest
0 голосов
/ 04 апреля 2019

Я передаю параметр даты внутри массива объектов в качестве параметра запроса при выполнении вызова rest, используя RestTemplate, в мой контейнер Spring.

Код выглядит следующим образом:

HttpEntity<SimplePipeServiceRequest> request = new HttpEntity<>(new Object[]{new Date(), 1}, headers);
response = template.postForEntity(uri1, request, String.class);

Когда запрос поступает на мой сервер, я получаю дату так же долго.Как я могу получить дату как дату?Почему это так долго?

Follwing - мой 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>

МожетКто-нибудь объяснит, где и как дата преобразуется в длинную, и если я хочу избежать ее, могу ли я достичь ее и могу ли я снова получить эквивалент даты из длинной позиции?

Я не знаю, как на самом деле работает Джексон с пружиной.

РЕДАКТИРОВАТЬ

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);

Тем не менее, ни один из сериализаторов не вызывается, когда сообщение выполнено.

Спасибо!

1 Ответ

0 голосов
/ 04 апреля 2019

Вам нужно настроить ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(DateFormat.getDateInstance());
mapper.setTimeZone(TimeZone.getTimeZone("UTC"));

Но если вы можете, то гораздо безопаснее использовать пакет Java 8 Time.

Для получения дополнительной информации возьмитевзгляд на:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...