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


@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 )

相关内容

  • 没有找到相关文章

最新更新