为List中的T进行参数校验


1、现在前端发送了一个POST请求,他的Data是一个数组,而不是对象(jsonObj的值两侧是中括号)。

var jsonObj = [{'id':11, 'name':'叵'}, {'id':12, 'name':'卜'}];
$.ajax({
    type : "post",
    // 省略
    data : JSON.stringify(jsonObj),
    // 省略
});

 

2、后端的请求方法应该让一个Input的数组对象,或是Input泛型的List对象入参,来进行数据绑定

@RequestMapping
@ResponseBody
public Integer diningId(@RequestBody PersonInput[] inputs) {
    // 省略
    return 0;
}

 

@RequestMapping
@ResponseBody
public Integer diningId(@RequestBody List<PersonInput> inputs) {
    // 省略
    return 0;
}

 

就参数绑定而言,两者都是可行的,参数成功绑定了。

 

3、现在需要做参数校验,比如id不能为空白,

很容易想到在PersonInput.id域的上方追加@NotBlank主键,

在请求方法中追加一个BindingResult对象作为入参。

@RequestMapping
@ResponseBody
public Integer diningId(@RequestBody List<PersonInput> inputs, BindingResult checker) {
    // 省略
    return 0;
}

 

class PersonInput {

    @NotBlank
    private String id;

    private String name;

    // 省略

}

 

4、这样做的话,参数绑定依然能够成功,但是参数校验会失败,checker会是null

 

5、需要追加定义一个新的Pojo,只持有List<PersonInput>对象,并在通过@Valid递归校验。

 

class PersonInputList {

    @Valid
    private List<PersonInput> inputs;

    // 省略

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM