2017-08-10 15 views
1

私はJava Springフレームワークで作業しており、入力時にJSONを受け取ります。これは、MyObjectsの何千もの配列で構成されています。 MyObjectsまたはAnotherObjectsのいずれかが制約(@NotNullまたは@Size)に失敗した場合、アプリケーションが例外をスローするようにしたいと思います。 オブジェクトの作成中ではなく、オブジェクトで何かをするときに、nullフィールドにアクセスすると、これまでアプリケーションはNullPointerExceptionをスローします。Java |ラッパー内のJSONオブジェクトの検証

私の質問は:

はアノテーションでできれネストされたJSONオブジェクトの制約をチェックする方法はありますか?次のようにオブジェクトが定義されてい

@RequestMapping(value = ...) 
public final void doSomething(@Valid @RequestBody MyObjectWrapper wrapper) { 
    // do something very time-heavy here 
}  

public class MyObjectWrapper { 
    private List<MyObject> myObjects; 

    public List<MyObject> getMyObjects() { 
     return myObjects; 
    } 

    public void setMyObjects(List<MyObjects> myObjects) { 
     this.myObjects = myObjects; 
    } 
} 

そして、MyObjectにクラス:

サーブレットがどのように見える

{ 
    "myObjects": [ 
    { 
     "code": "PQ", 
     "another_objects": [ 
     { 
      "attr1": "value1", 
      "attr2": "value2", 
      "attrN": "valueN" 
     }, 
     { 
      "attr1": "value1", 
      "attr2": "value2", 
      "attrN": "valueN" 
     } 
     ] 
    }, 
    { 
     ... 
    } 
    ] 
} 

:のようにJSONに見える

public class MyObject { 

    @NotNull 
    @NotEmpty(message = ...) 
    List<AnotherObject> anotherObjects; 

    @NotNull 
    @Size(min = 2, max = 2, message = ...) 
    String code; 

    @JsonCreator 
    public MyObject(@JsonProperty("another_objects") List<AnotherObjects> anotherObjects, 
        @JsonProperty("code") String code) { 
     this.code = code; 
     this.anotherObjects = anotherObjects; 
    } 

    /* getters and setters */ 
} 

AnotherObjectsは類似していますが、文字列のみで構成されています。

答えて

2

は完璧に動作、ありがとうラッパー

public class MyObjectWrapper { 
    @Valid 
    private List<MyObject> myObjects; 

    public List<MyObject> getMyObjects() { 
     return myObjects; 
    } 

    public void setMyObjects(List<MyObjects> myObjects) { 
     this.myObjects = myObjects; 
    } 
} 
+0

のネストされたオブジェクトに@Validを追加します。 – Aechlys