2017-09-14 29 views
2

JDK8上のJersey 2.17およびJava用のRESTful APIがあります。これはJSON形式のAPIです。このAPIは、Javaオブジェクトを受け入れ、それがこの分野を持っています、VALUE_NUMBER_FLOATトークンからjava.sql.Timestampのインスタンスを逆シリアル化できません。

"processEndTime" : 1434989360, 

しかし、数は大きなものであるとき、それは失敗します。私は少数を提出する際に

@JsonProperty("processEndTime") 
public Timestamp getRunDate() { 
    return runDate; 
} 

@JsonProperty("processEndTime") 
public void setRunDate(Timestamp runDate) { 
    this.runDate = runDate; 
} 

は今、それは次のように完璧に動作しますこのように:

"processEndTime" : 1434989360380, 

最も奇妙なことは、私はJMeterのテスト・ケースを持っていたということです、それはまったく同じ大きな番号を送信し、それが問題なく渡すことができます。私はサーバー側でこの番号を確認し、正しく渡されたことを確認できます。

完全なエラーメッセージは次のとおりです。

は、[ソースでVALUE_NUMBER_FLOATトークンの外をjava.sql.Timestampのインスタンスをデシリアライズできません:org.glassfish.jersey.me[email protected]23117fbd。行:1、列:562](参照チェーン:com.abc.api.dto.MyClassA ["processEndTime"])

何か提案がありますか?

答えて

0

私は問題を把握:

私はいくつかの要求データに変換した:

JSONObject analysis = new JSONObject(templateAnalysis3); 
    data = analysis.toString(); 

このToString関数は、Eフォーマットに長い番号を変換します:

1434989360380 -> 1.43498936038E12 

このEフォーマットはサポートされておらず、このエラーの原因となります。

私が直接templateAnalysis3を使用してそれを修正:

data = templateAnalysis3; 
関連する問題