java - 如何在 Spring 禁用将 ZonedDateTime 字段的时区转换为 UTC,仅针对一个字段并保留所有其他字段?

标签 java spring spring-boot java-8 jackson

我有一个 spring boot 应用程序,当 RESTful API 收到具有 ZonedDateTime 字段的请求正文时,ZonedDateTime 字段的时区将转换为 UTC。如何让应用程序只为一个字段保留原始时区并将其转换为所有其他字段的 UTC?

我知道我们可以通过将以下行添加到属性文件来为所有字段禁用它,但在我的例子中,我不想为所有字段禁用它,我只想为一个字段禁用它。

spring.jackson.deserialization.ADJUST_DATES_TO_CONTEXT_TIME_ZONE = false

最佳答案

可以使用JsonFormat注解:

@JsonFormat(without = {ADJUST_DATES_TO_CONTEXT_TIME_ZONE})

看看下面的例子:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.File;
import java.io.IOException;
import java.time.ZonedDateTime;

import static com.fasterxml.jackson.annotation.JsonFormat.Feature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE;

public class ZonedJsonApp {

    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();
        JsonMapper mapper = JsonMapper.builder()
                .addModule(new JavaTimeModule())
                .build();
        System.out.println(mapper.readValue(jsonFile, ZonedPojo.class));
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
class ZonedPojo {
    private ZonedDateTime with;

    @JsonFormat(without = {ADJUST_DATES_TO_CONTEXT_TIME_ZONE})
    private ZonedDateTime without;
}

下面的 JSON 负载:

{
  "with": "2007-12-03T10:15:30+04:00",
  "without": "2007-12-03T10:15:30+04:00"
}

打印:

ZonedPojo(with=2007-12-03T06:15:30Z[UTC], without=2007-12-03T10:15:30+04:00)

关于java - 如何在 Spring 禁用将 ZonedDateTime 字段的时区转换为 UTC,仅针对一个字段并保留所有其他字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68959017/

相关文章:

Java spring集成网关请求响应时间记录

spring - 如何从绑定(bind)结果中出现错误的属性文件获取本地化消息?

java - 从 Spring EventListener 更新 Vaadin 8 UI

spring - 在 Spring Boot 中将 servlet 添加到管理端口

java - 我们如何让一个字符串出现 minOccurs ="1"?

java - 如何在没有源代码的情况下查找 J2EE 应用程序中的内存泄漏

java - Spring引导无法从 cucumber 测试上下文创建数据源bean

java - 从 gitlab-ci.yml 启动/停止远程服务器上的 tomcat

java - 查找距离我的位置 180 度(南)1 公里的位置

java - 如何设置 USB 上的 Eclipse 以在没有管理员权限的计算机上使用?