21

クライアント側では、dd/MM/yyyy 日付形式を使用します。フィールドは Twitter ブートストラップ 3 日時ピッカー ( https://eonasdan.github.io/bootstrap-datetimepicker/ )を使用します。

送信した json にtwitter ブートストラップ 3 日時ピッカー 24/07/2015 を入力する
と、生年月日: "24/07/2015" と表示されます。

私のdtoでは、私はそうします

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private Date birthdate;

サーバーで日付を受信すると、dto で次のように表示されます: 23/07/2015 19:00

1日が失われます。

説明はありますか?

4

5 に答える 5

0

Had the same issue. Using postman to verify that the client is not the culprit. Seems like an issue with the timezone Jackson is using vs the timezone of the system. Had to change the Jackson config to compensate for dates

@Configuration

public class JacksonConfig {

    @Bean
    @Primary
    public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
        final Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder = new Jackson2ObjectMapperBuilder();
        jackson2ObjectMapperBuilder.timeZone(TimeZone.getDefault());
        jackson2ObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
        jackson2ObjectMapperBuilder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return jackson2ObjectMapperBuilder;
    }

}
于 2019-01-14T15:43:25.793 に答える
0

私はJavaで同じ問題を抱えていました。ObjectMapper を使用してデフォルトのタイムゾーンに設定できます

ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
mapper.setTimeZone(TimeZone.getDefault());

ここでの解決策:Jackson @JsonFormatは、1日少ない日付を設定します

完全構成クラス:

@Configuration
@EnableWebMvc
public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    for (HttpMessageConverter converter : converters) {
        if (converter instanceof org.springframework.http.converter.json.MappingJackson2HttpMessageConverter) {
            ObjectMapper mapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
            mapper.registerModule(new Hibernate5Module());
            mapper.setTimeZone(TimeZone.getDefault());
        }
    }
}
于 2020-12-28T08:27:06.993 に答える