2017-09-02 300 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的值必須是常量表達式」 –