zoukankan      html  css  js  c++  java
  • 为List<T>中的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;
    
        // 省略
    
    }
  • 相关阅读:
    CSS实现DIV水平自适应居中
    jQuery实现鼠标拖动改变Div高度
    Word2013创建目录
    raw,cow,qcow,qcow2镜像的比较
    Chrome浏览器官方下载地址
    OLE/COM 对象查看器 & OLE常用术语
    VmWare为Fedora虚拟机扩展磁盘
    Linux常用命令
    项目经理与客户沟通的宜与忌
    转 FileStream Read File
  • 原文地址:https://www.cnblogs.com/deolin/p/7416398.html
Copyright © 2011-2022 走看看