解決@Valid 校驗List參數(shù)無效的問題

如下代碼中使用@Valid注解校驗List<CreateWaybillDTO>類型參數(shù)waybillDTOS

    @ApiOperation("新建運單")
    @PostMapping(value = "createWaybill" + Constant.POST_JSON)
    @ApiResponse(code = 200, message = "創(chuàng)建成功", response = ResponseEntity.class)
    public ResponseEntity<BaseDTO> createWaybill(@RequestBody @Valid List<CreateWaybillDTO> waybillDTOS) {
        return new ResponseEntity(new BaseDTO("200", "創(chuàng)建成功"), HttpStatus.OK);
    }

校驗參數(shù)如下

    // 運單id
    @ApiModelProperty("運單id")
    @NotNull
    @Min(value = 1, message = "運單id不合法")
    private int waybillId;
    // 進(jìn)口出口
    @ApiModelProperty("進(jìn)口出口")
    @NotNull
    private int importAndExport;

調(diào)用參數(shù)如下


[  
   {  
     "arrivalTime": "string",  
     "bookingPerson": "string",  
     "bookingPersonType": "string",  
     "bookingSpacePrice": "string",  
     "boxDTOList": [  
       {  
         "boxId": 0,  
         "boxNumber": "string",  
         "boxType": "string",  
         "cargoWeight": "string",  
         "goodsName": "string",  
         "leadSealNumber": "string"  
       }  
     ],  
     "boxRemarks": "string",  
     "contactAddress": "string",  
     "contactFullName": "string",  
     "contactPerson": "string",  
     "contactPhone": "string",  
     "contactPoint": "string",  
     "customerSignsReceipt": "string",  
     "dangerousGoodsCategory": "string",  
     "dangerousGoodsIdentification": "string",  
     "dangerousGoodsNumber": "string",  
     "dangerousGoodsRemarks": "string",  
     "departurePort": "string",  
     "destinationPort": "string",  
     "emptyBoxGoods": "string",  
     "financialWithholdingGoods": "string",  
     "freightCollection": "string",  
     "imdgr": "string",  
     "importAndExport": 0,  
     "internalRemarks": "string",  
     "packingTime": "string",  
     "paymentMethod": "string",  
     "remarks": "string",  
     "shipName": "string",  
     "specialRequirements": "string",  
     "voyage": "string",  
     "waybillId": 0,  
     "waybillNo": "string",  
     "withholdingGoods": "string"  
   }  
 ]

返回結(jié)果如下

{
  "id": null,
  "backcode": "200",
  "backmsg": "創(chuàng)建成功"
}

我們校驗waybillId最小值是1矮台,傳入?yún)?shù)的值是0洞焙,但是確拿到了校驗通過的結(jié)果
解決方法:
新建一個類實現(xiàn)List接口,并實現(xiàn)對應(yīng)方法,如下

public class ValidList<E> implements List<E> {

    @Valid
    private List<E> list = new ArrayList<>();

    public List<E> getList() {
        return list;
    }

    public void setList(List<E> list) {
        this.list = list;
    }

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return list.contains(o);
    }

    @Override
    public Iterator<E> iterator() {
        return list.iterator();
    }

    @Override
    public Object[] toArray() {
        return list.toArray();
    }

    @Override
    public <T> T[] toArray(T[] a) {
        return list.toArray(a);
    }

    @Override
    public boolean add(E e) {
        return list.add(e);
    }

    @Override
    public boolean remove(Object o) {
        return list.remove(o);
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        return list.contains(c);
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        return list.addAll(c);
    }

    @Override
    public boolean addAll(int index, Collection<? extends E> c) {
        return list.addAll(index, c);
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        return list.removeAll(c);
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        return list.retainAll(c);
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public E get(int index) {
        return list.get(index);
    }

    @Override
    public E set(int index, E element) {
        return list.set(index, element);
    }

    @Override
    public void add(int index, E element) {
        list.add(index, element);
    }

    @Override
    public E remove(int index) {
        return list.remove(index);
    }

    @Override
    public int indexOf(Object o) {
        return list.indexOf(o);
    }

    @Override
    public int lastIndexOf(Object o) {
        return list.lastIndexOf(o);
    }

    @Override
    public ListIterator<E> listIterator() {
        return list.listIterator();
    }

    @Override
    public ListIterator<E> listIterator(int index) {
        return list.listIterator(index);
    }

    @Override
    public List<E> subList(int fromIndex, int toIndex) {
        return list.subList(fromIndex, toIndex);
    }
}

我們將接口修改成如下
List<CreateWaybillDTO>修改為ValidList<CreateWaybillDTO>我們剛剛新建的實現(xiàn)類

    @ApiOperation("新建運單")
    @PostMapping(value = "createWaybill" + Constant.POST_JSON)
    @ApiResponse(code = 200, message = "創(chuàng)建成功", response = ResponseEntity.class)
    public ResponseEntity<BaseDTO> createWaybill(@RequestBody @Valid ValidList<CreateWaybillDTO> waybillDTOS) {
        return new ResponseEntity(new BaseDTO("200", "創(chuàng)建成功"), HttpStatus.OK);
    }

同樣的參數(shù)調(diào)用這個接口返回結(jié)果如下

{
  "timestamp": "2019-05-08",
  "status": 400,
  "error": "Bad Request",
  "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
  "errors": [
    {
      "codes": [
        "Min.createWaybillDTOList.list[0].waybillId",
        "Min.createWaybillDTOList.list.waybillId",
        "Min.list[0].waybillId",
        "Min.list.waybillId",
        "Min.waybillId",
        "Min.int",
        "Min"
      ],
      "arguments": [
        {
          "codes": [
            "createWaybillDTOList.list[0].waybillId",
            "list[0].waybillId"
          ],
          "arguments": null,
          "defaultMessage": "list[0].waybillId",
          "code": "list[0].waybillId"
        },
        1
      ],
      "defaultMessage": "運單id不合法",
      "objectName": "createWaybillDTOList",
      "field": "list[0].waybillId",
      "rejectedValue": 0,
      "bindingFailure": false,
      "code": "Min"
    }
  ],
  "message": "Validation failed for object='createWaybillDTOList'. Error count: 1",
  "path": "/web/WaybillPush/createWaybill.json"
}

問題解決

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蠢涝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子健蕊,更是在濱河造成了極大的恐慌,老刑警劉巖熊痴,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異聂宾,居然都是意外死亡果善,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門系谐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巾陕,“玉大人,你說我怎么就攤上這事纪他”擅海” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵茶袒,是天一觀的道長梯刚。 經(jīng)常有香客問我,道長弹谁,這世上最難降的妖魔是什么乾巧? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮预愤,結(jié)果婚禮上沟于,老公的妹妹穿的比我還像新娘。我一直安慰自己植康,他們只是感情好旷太,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著销睁,像睡著了一般供璧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冻记,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天睡毒,我揣著相機(jī)與錄音,去河邊找鬼冗栗。 笑死演顾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隅居。 我是一名探鬼主播钠至,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胎源!你這毒婦竟也來了棉钧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤涕蚤,失蹤者是張志新(化名)和其女友劉穎宪卿,沒想到半個月后的诵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡愧捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年奢驯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片次绘。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘪阁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邮偎,到底是詐尸還是另有隱情管跺,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布禾进,位于F島的核電站豁跑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泻云。R本人自食惡果不足惜艇拍,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宠纯。 院中可真熱鬧卸夕,春花似錦、人聲如沸婆瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廉白。三九已至个初,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猴蹂,已是汗流浹背院溺。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留磅轻,地道東北人覆获。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像瓢省,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痊班,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,960評論 6 13
  • CloudJavaBackendSummaries1勤婚、開發(fā)環(huán)境eclipse工程,引入jw倉庫的jw-base涤伐,3...
    燕京博士閱讀 1,029評論 0 0
  • JAVA面試題 1馒胆、作用域public,private,protected,以及不寫時的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,152評論 1 0
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,812評論 0 1
  • 人生如果能重頭缨称,再不會放棄您的溫柔!誰曾想歲月悠悠祝迂,多少美夢已付諸東流睦尽。而今孤立深秋,斬不斷的思緒又...
    愛粉閱讀 339評論 2 6