[英]Timezone of ZonedDateTime changed to UTC during auto conversion of RequestBody with Spring Boot
我試圖在對 Spring Boot 控制器執行 POST/PUT 時保留在前端設置的 ZonedDateTime 的 ZoneId。
我要轉移的值是: 2019-05-01T00:00:00+01:00[Europe/Zagreb]
在 POST/PUT 之后,ZoneId 被轉換為 UTC 並且小時數被調整。 從技術上講,這個更新后的值代表時間線上的同一點,但原始 ZoneId 丟失了,我希望將其存儲起來以便稍后能夠將其顯示給最終用戶。
// DTO
public class PriceInfoDTO {
@JsonFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']",
with = JsonFormat.Feature.WRITE_DATES_WITH_ZONE_ID )
@DateTimeFormat( pattern = "yyyy-MM-dd'T'HH:mm:ssXXX['['VV']']", iso = ISO.DATE_TIME )
private ZonedDateTime validFrom;
}
// Controller
@PutMapping(
path = PATH + "/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<PriceInfo> update(
@PathVariable("id") final Integer id,
@RequestBody final PriceInfoDTO dto
) {
System.out.println(dto);
...
}
查看我瀏覽器中的網絡選項卡,從瀏覽器到 Spring Controller 的請求具有以下值(有效負載):
2019-05-01T00:00:00+01:00[Europe/Zagreb]
這與格式模式相同。
當我將 DTO 轉儲到控制台時,我得到以下結果:
2019-04-30T22:00Z[UTC]
有什么方法可以保留在請求中收到的 ZoneId 嗎? 我應該編寫自己的序列化器和反序列化器來實現這一點嗎?
謝謝!
將以下行添加到application.properties
文件:
spring.jackson.deserialization.ADJUST_DATES_TO_CONTEXT_TIME_ZONE = false
參考:
也可以使用ObjectMapper
以編程方式設置:
objectMapper.configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true);
objectMapper.configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.