2012-03-05 14 views

答えて

1

あなたが定義した型のオブジェクト表現を使用する必要があります。

ダブル - >ダブル int型 - >整数

これはあなたがそうのようなヌルとしてそれらを定義することができます:

@Root(name = "someWS") 
public class GetSmth{ 
    @Element(name="Latitude", required=false) 
    private Double latitude; 

    @Element(name="Longtitude", required=false) 
    private Double longtitude; 

    @Element(name="PageNumber", required=false) 
    private Integer pageNumber; 

    @Element(name="PageSize", required=false) 
    private Integer pageSize; 

    @Element(name="CompanyDetailId") 
    private Integer companyDetailId; 


    public GetSmth(Double latitude, Double longtitude, Integer pageNumber, 
       Integer pageSize, Integer companyDetailId) { 
     this.latitude = latitude; 
     this.longtitude = longtitude; 
     this.pageNumber = pageNumber; 
     this.pageSize = pageSize; 
     this.companyDetailId = companyDetailId; 
    } 
} 

documentationを確認すると、オブジェクトのシリアライゼーションでは必須= falseがオブジェクトのシリアライズよりも多くなります。したがって、そこにプリミティブ型を使用できますが、その場合は代入中にnull以外の値を使用する必要があります。デシリアライゼーション時に、xmlが緯度を定義していない場合、緯度はnullの代わりにデフォルトの初期値0が与えられます。ちょうどあなたが望む行動に依存します。

編集:

は、オブジェクトの表現でコンストラクタを定義してください:

public GetSmth(Double latitude, Double longtitude, Integer pageNumber, 
    Integer pageSize, Integer companyDetailId) 
+0

質問をNPEを生成するコードで更新すると、より良い回答が得られます。 –

+0

あなたが更新したのを見ました。コンストラクタがメソッド宣言のプリミティブ型を必要とする場合、nullを指定するとNPEがスローされます。 –

1

は、私は(唯一の必須フィールドを取るか、1)空のデフォルトコンストラクタを持っていることを好む、とオプションのプロパティの設定を追加します。変更可能性が懸念される場合は、Builderパターンを使用して、目的のフィールドのみを含むオブジェクトを作成します。

"partial"オブジェクト(メンバーの一部のみが設定されているオブジェクト)では、Simpleフレームワークは指定されたフィールドのみをXMLにシリアル化します。

+0

そのテクニックの2分の1。プリミティブ型が指定されていない場合は、実際にはそれをシリアル化しませんか? –

+0

ああ、私はここでは原始的なタイプについて具体的に話していることを知らなかった。私はこれを試していないが、プリミティブはデフォルト値を持つので、まだシリアル化されていると思うだろう。 – curioustechizen

関連する問題