@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的值必须是常量表达式”
请帮助我解决这个问题。
提前致谢, 毗
答案 0 :(得分:3)
您可以使用JsonFormat.DEFAULT_TIMEZONE
:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)
从文档中
特殊值
DEFAULT_TIMEZONE
可用于表示“只使用默认值”,其中默认值由序列化上下文指定,而序列化上下文又默认为系统默认值(TimeZone.getDefault()
),除非明确设置为另一个语言环境。
答案 1 :(得分:1)
您无法将 timezone 值指定为动态值或运行时值。它应该是常量或编译时间值,并且枚举也被接受。
因此,您应该为时区分配一个常量。如下。
private static final String MY_TIME_ZONE="Asia/Kolkata";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = MY_TIME_ZONE);
答案 2 :(得分:0)
您可以使用枚举来丰富您将使用的时区。使用枚举的解决方案是以下枚举类实现。
package <your package goes here>;
import java.util.TimeZone;
public enum TimeZoneEnum {
DEFAULT(TimeZone.getDefault()),
ASIA_KOLKATA = (TimeZone.getTimeZone("Africa/Abidjan")),
//other timezones you maybe need
...
private final TimeZone tz;
private TimeZoneEnum(final TimeZone tz)
{
this.tz = tz;
}
public final TimeZone getTimeZone()
{
return tz;
}
}
然后你可以使用如下的枚举:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZoneEnum.ASIA_KOLKATA )