2016-12-17 2 views
0

У меня есть класс, который содержит следующие атрибуты:Неудачное время при использовании @JsonFormat (+1 час)

@JsonFormat(pattern= "yyyy/MM/dd hh:mm") 
    private java.util.Date begin; 

Теперь я делаю POST для моего отдыха службы:

mockMvc.perform(post("/rest/foo") 
       .accept(MediaType.APPLICATION_JSON) 
       .contentType(MediaType.APPLICATION_JSON) 
       .content("{ \"begin\": \"2016/12/04 10:20\" }") 
       .andExpect(status().isOk()) 
       .andReturn(); 

Наконец, переменная «begin» имеет значение: Sun Dec 04 11:20:00 CET 2016

Итак, каким-то образом сопоставление объектов JSON с объектами добавляет один час.

Одно из решений заключается в использовании:

@JsonFormat(pattern= Constants.TIMESTAMP_FORMAT, timezone = "CET") 
private Date begin; 

Но летом мы CEST, поэтому я не могу жёстко часовой пояс.

Любые решения? Благодаря!

Btw: Первоначально дата взята из jquery datetimepicker.

+0

Джексон по умолчанию использует GMT, один час за СЕТ – chaoluo

+0

я бы порекомендовал вам иметь дело чисто со временем UTC в вашем серверном приложении, и рассмотреть превращая их в часовой пояс пользователя чисто передним концом. Таким образом, ваш API должен отправить, например. временную метку Unix или строку ISO8601. – jonrsharpe

ответ

0

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

при таком подходе часовому поясу извлекается с сервера и Feeded Джексону

<bean name="timeZone" class="java.util.TimeZone" factory-method="getDefault"></bean> 
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="objectMapper"> 
     <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> 
      <property name="timeZone" ref="timeZone"></property> 
     </bean> 
    </property> 
</bean> 
+0

Спасибо. Что делать, если зона изменяется от CET до CEST на сервере. Работает ли он без перезапуска webapp? – NoobieNoob

+0

Время сервера будет основано на UTC. UTC, является основным стандартом времени, с помощью которого мир регулирует часы и время. Он не учитывает летнее время. https://blog.cdemi.io/time-zones-and-daylight-savings-in-your-infrastructure-and-applications/ –

Смежные вопросы