@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Kolkata")
private Date activationDate;
从上面的Java代码中,我想将TimeZone值设置为当前系统时区,使用以下: TimeZone.getDefault()。getId() - 它返回值为'asa/asia/kolkata&quolkata"
但是,如果我将此代码设置为JSON格式
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = TimeZone.getDefault().getID())
我会遇到错误,例如'注释属性的值 请帮助我解决这个问题。 预先感谢Vishnu
您可以使用JsonFormat.DEFAULT_TIMEZONE
,正确配置ObjectMapper :
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = JsonFormat.DEFAULT_TIMEZONE)
来自文档:
值指示默认时区(来自避免序列化或序列化上下文):注释不能定义要使用的值。
注意:默认情况下并不是说JVM默认值,而是Jackson DataBindings默认值,通常是UTC,但可以在ObjectMapper上更改。
为了配置ObjectMapper
:
@Configuration
public class MyApp {
@Autowired
public void configureJackson(ObjectMapper objectMapper) {
objectMapper.setTimeZone(TimeZone.getDefault());
}
}
在应用程序上设置默认时区使用此JVM属性:
-Duser.timezone=Asia/Kolkata
您无法分配时区值一个动态或运行时值。它应该是恒定的或编译的时间值,枚举太接受了。
因此,您应该将常数分配给时区。如下。
private static final String MY_TIME_ZONE="Asia/Kolkata";
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = MY_TIME_ZONE);
您可以使用枚举来丰富您使用的时区。使用枚举的解决方案是以下枚举类实施。
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 )