記錄工作學習中的點點滴滴~
在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; }