Vis*_*u K 7 java timezone json dto spring-data-jpa
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Kolkata")
private Date activationDate;
Run Code Online (Sandbox Code Playgroud)
从上面的 java 代码中,我想使用以下方法将时区值设置为当前系统时区: TimeZone.getDefault().getID() - 它返回的值是“Asia/Kolkata”
但是如果我将此代码设置为 json 格式
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZone.getDefault().getID())
Run Code Online (Sandbox Code Playgroud)
我收到类似“注释属性 JsonFormat.timezone 的值必须是常量表达式”之类的错误
请帮我解决这个问题。
提前致谢,毗湿奴
xon*_*nya 13
您可以使用JsonFormat.DEFAULT_TIMEZONE,经过正确配置ObjectMapper:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)
Run Code Online (Sandbox Code Playgroud)
从文档:
指示应使用默认 TimeZone(来自反序列化或序列化上下文)的值:注释未定义要使用的值。
注意:这里的默认值并不意味着 JVM 默认值,而是 Jackson 数据绑定默认值,通常是 UTC,但可能会在 ObjectMapper 上更改。
为了配置ObjectMapper:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)
Run Code Online (Sandbox Code Playgroud)
要在您的应用程序上设置默认时区,请使用此 JVM 属性:
-Duser.timezone=Asia/Kolkata
Run Code Online (Sandbox Code Playgroud)
您不能为时区值分配动态值或运行时值。它应该是常量或编译时值,并且枚举也被接受。
所以你应该为timezone分配一个常量。像下面。
private static final String MY_TIME_ZONE="Asia/Kolkata";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = MY_TIME_ZONE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38402 次 |
| 最近记录: |