0

REST サービスを備えた Web アプリがあります。JAXB アノテーションを持つ Bean クラスがあります。

@XmlRootElement(name = "foo")
class Foo {
    @XmlElement
    private String bar1;

    @XmlElement
    private Double bar2;

    @XmlElement
    private Double bar3;
}

次に、JSON でリクエストを送信します。

{
    "foo" : {
        "bar1" : "1",            
        "bar3" : ""
    }
}

私が望むリクエストでは:値bar1を更新し、 null を値 bar3 に設定します

しかし、サーバー上では、クラスのフィールドの両方にnullがあります。つまり、送信しなかったためbar2が null であり、空で送信したためbar3も null です。質問は次のとおりです。どのパラメーターがnullを設定するために送信され、どのパラメーターが送信されなかったかをサーバーでどのように理解できますか?それを無視する必要がありますか?

4

1 に答える 1

0

フィールドへのプロパティアクセスの使用。

public class Foo
{
   private Double bar;  

   public Double getBar()
   {
      return bar;
   }

   public void setBar(Double bar)
   {
      System.out.println("I am in setter! " + bar); 
      this.bar = bar;
   }
}  

今、あなたが逆シリアル化を試みるならば

{
   "bar" : ""
}  

コンソールへの出力は

I am in setter! null  

デシリアライズを試みる場合

{
}  

その後、コンソールへの出力はありません-セッターはアクセスされませんでした。
セッターで値を確認できます

   @XmlElement
   private Double bar3;  

   public void setBar3(Double bar3)
   {
      if (bar3 == null)
      {
         this.bar3 = new Double(-1);   
      }
      this.bar3 = bar3;
   } 
于 2012-09-21T14:02:13.377 に答える