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;
    
        // 省略
    
    }
  • 相关阅读:
    1.6(设计模式)过滤器模式
    1.5(设计模式)单例模式
    1.4(设计模式)原型模式
    获取第几周
    前端的一个工具函数库
    纯css实现宽度自适应,高度与宽度成比例
    网站前面的图标
    从url获取参数有中文时会出现乱码的问题
    关于ios使用jquery的on,委托事件失效
    在vue1.0遇到vuex和v-model的坑
  • 原文地址:https://www.cnblogs.com/deolin/p/7416398.html
Copyright © 2011-2022 走看看