2016-10-29 5 views
1

私はこの種の質問が過去に提起されたが、まったく同じ問題ではないことを知っていますので、私はこの質問をする権利を発見しました。私は、REST WebサービスのJACKSONとともにJERSEYを使用していジャクソンはセッターを使用していません

(JAVA 1.8_011 + TomcatのV7.0 + Windows 7の+ JERSEY-共通2.23.2 + JACKSONの2.8.2)私のPOJOフィールドの

ワン以下のセッターがあります

@PUT 
@Path("/updateCoupon") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.TEXT_PLAIN) 
public String updateCoupon(Coupon coupon) { 

    try 
    { 
     //Coupon tmpCoupon = new Coupon(coupon); 
     System.out.println("*" + coupon.getEndDate().toString() + "*"); 
     getFacade().updateCoupon(coupon); 
     return "ok"; 
    } 
    catch (FacadeException | IllegalArgumentException e) 
    { 
     return e.getMessage(); 
    } 

} 

JSON::

public void setEndDate(LocalDateTime endDate) { 
    if (this.startDate != null && this.startDate.isAfter(endDate)) 
    { 
     throw new IllegalArgumentException("Start date must to be before End date"); 
    } 
    this.endDate = endDate; 
} 

私のWebサービスは以下のとおりです。デバッグ後

{ 
    "startDate":"2016-11-04T00:00", 
    "endDate":"2016-11-09T00:00", 
    "amount":7, 
    "id":143, 
    "image":"390_290_5cc10a4d-9a3f-4cfc-8.jpg", 
    "message":"gfd", 
    "price":3.34, 
    "title":"n37", 
    "type":"HEALTH" 
} 

と(セッター、それ自身が問題ではないので、それはより多くのセッターで起こる)問題は、JSONをPOJOにJSONから変換するために私のセッターを使用していないということです

おかげ

+0

コメントを外したときの例外は何ですか? – Veeram

+0

throw new IllegalArgumentException( "開始日は終了日より前でなければなりません"); –

+1

あなたは正確に何を期待していますか?どのコード行が失敗するのですか?投稿のサンプルjsonには終了日より前の開始日があるため、問題の内容を理解できません。 – Phil

答えて

1
をテスト

クーポンの現在のコードは、セッターが呼び出される順序に依存します。 setEndDateがsetStartDateの前に呼び出された場合、setEndDateの検証では実際にstartDateフィールドは使用できません。この問題を解決するには

、あなたはできます

  • があなたの豆からセッターを削除し、そのよう、静的なファクトリメソッドを使用して@JsonCreatorとそれをラベル
  • 検証ロジックを実行し、コンストラクタで初期化に変換Jacksonはそれをコンストラクタの代わりに使用します
  • 上記の2つのもののいくつかの組み合わせ
  • すべてのセッターがinvされた後にチェックメソッドを作成することを可能にする何らかのBeanオブジェクトの作成者に切り替えますImmutablesやFreeBuilderなどのoked(本質的に2番目のオプションの自動バージョン)
+0

こんにちは、 あなたの答えをありがとうが、これは問題ではありません 私は別のフィールドに基づいていない別のセッターを持って、同じことをします。 また、私は注釈を使用して呼び出し順序を定義し、それも助けになりません JSONからPOJOへの "翻訳"がJACKSONによって実行されるときに、setterに入力されません。@Jsonsetterのような注釈を成功させずに試しました –

+0

セッターは '@JsonProperty'とラベル付けされていますか? –

+0

また、この回答のために –

関連する問題