Java-List的對象的校驗不起作用的解決方案


 

 

記錄工作學習中的點點滴滴~

 

在spring框架下,使用 javax.validation.* 校驗參數的時候,對 java.util.List 的對象的校驗不起作用。

請求方式 POST

請求參數格式 application/json

 

package com.tsing0520.config;

import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {
     /**
     * 參數校驗異常處理 (@RequestParam注解拋出)
     * @param ex
     * @return
     */
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public String handleBindException(BindException ex) {
        StringBuilder stringBuilder = new StringBuilder();
        for (FieldError error : ex.getBindingResult().getFieldErrors()){
            stringBuilder.append(error.getDefaultMessage()).append(",");
        }
        String msg = stringBuilder.substring(0, stringBuilder.length() -1);
        return msg;
    }
    
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public String validException(MethodArgumentNotValidException ex) {
        StringBuilder stringBuilder = new StringBuilder();
        for (FieldError error : ex.getBindingResult().getFieldErrors()) {
            stringBuilder.append(error.getDefaultMessage()).append(",");
        }
        String msg = stringBuilder.substring(0, stringBuilder.length() -1);
        return msg;
    }
}

 

package com.tsing0520.controller;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.tsing0520.model.param.PersonListParam;
import com.tsing0520.model.param.PersonParam;

import cn.hutool.json.JSONUtil;

@ResponseBody
@Controller
@RequestMapping("/verifyparam")
public class ValidateParamController {
    
    @PostMapping("/uploadPerson")
    public String uploadPerson(@RequestBody @Valid PersonParam personParam) {
        System.out.println(JSONUtil.toJsonStr(personParam));
        return "uploadPerson...success";
    }
    
    
    @PostMapping("/batchUploadPerson")
    public String batchUploadPerson(@RequestBody @Valid PersonListParam personListParam) {
        System.out.println(JSONUtil.toJsonStr(personListParam));
        return "batchUploadPerson...success";
        
    }
    
}

 

package com.tsing0520.model.param;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;

import lombok.Data;

@Data
public class PersonParam {
    
    @Min(value=1,message="id最小值為1")
    private Integer id;
    
    @NotBlank(message="name不能為空")
    private String name;
    
}

 

未起作用的代碼

package com.tsing0520.model.param;

import java.util.List;

// import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;

import lombok.Data;

@Data
public class PersonListParam {
    
    // @Valid
    @NotEmpty(message="personParamList不能為空")
    List<PersonParam> personParamList;
}

 

{
    "personParamList": [
        {
            "name": "abc",
            "id": 0
        },
        {
            "name": "abc",
            "id": 0
        }
    ]
}

 

 

 

 

修改之后的代碼

package com.tsing0520.model.param;

import java.util.List;

 import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;

import lombok.Data;

@Data
public class PersonListParam {
    
    @Valid
    @NotEmpty(message="personParamList不能為空")
    List<PersonParam> personParamList;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM