2017-09-02 50 views
0
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = "Asia/Kolkata") 
private Date activationDate; 

嗨,设置当前时区到时区@JsonFormat值

从上面的Java代码,我想用下面 TimeZone.getDefault()来设置的时区值作为当前系统时区。的getID() - 它返回值“亚洲/加尔各答”

但是,如果我这个代码设置为JSON格式

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

我越来越喜欢错误“的注释属性的值JsonFormat.timezone必须是一个常量表达式”

请帮助我解决这个问题。

由于提前, 毗湿奴

回答

0

您不能分配时区值动态或运行时的值。它应该是恒定的或编译时间的值,枚举也被接受。

所以你应该给时区分配一个常量。如下所示。

private static final String MY_TIME_ZONE="Asia/Kolkata"; 
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy", timezone = MY_TIME_ZONE); 
+0

嗨拉朱·夏尔马 我想设置时区系统的当前时区,不需要分配恒定值,如“亚洲/加尔各答”。 谢谢 –

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) 
+0

Thanks Dude, 使用上面的代码,仍然会得到相同的错误“注释属性JsonFormat.timezone的值必须是常量表达式” –