将当前时区设置为@JsonFormat 时区值

新手上路,请多包涵
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Kolkata")
private Date activationDate;

从上面的 java 代码中,我想使用以下方法将时区值设置为当前系统时区: TimeZone.getDefault().getID() - 它返回值为 “Asia/Kolkata”

但是如果我将这段代码设置为 json 格式

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZone.getDefault().getID())

我收到类似 “注释属性 JsonFormat.timezone 的值必须是常量表达式”的 错误

请帮我解决这个问题。

提前致谢, 毗湿奴

原文由 Vishnu Moorthy Kanagaraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

在正确配置 ObjectMapper 之后,您可以使用 JsonFormat.DEFAULT_TIMEZONE

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)

从文档:

指示应使用默认时区(来自反序列化或序列化上下文)的值:注释未定义要使用的值。

注意:此处的默认值并不意味着 JVM 默认值,而是 Jackson 数据绑定默认值,通常是 UTC,但可能会在 ObjectMapper 上更改。

为了配置 ObjectMapper

 @Configuration
public class MyApp {

    @Autowired
    public void configureJackson(ObjectMapper objectMapper) {
        objectMapper.setTimeZone(TimeZone.getDefault());
    }
}

要在您的应用程序上设置默认时区,请使用此 JVM 属性:

 -Duser.timezone=Asia/Kolkata

原文由 xonya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题