valid参数验证框架使用

2019-08-22  本文已影响0人  零星恋雪

springboot的使用方式

第一步 声明验证框架到springboot中

@Configuration
@EnableAutoConfiguration
public class ValidatorConfig {
   @Bean
   public MethodValidationPostProcessor methodValidationPostProcessor(){
      return new MethodValidationPostProcessor();
   }
}

第二步 controller 类头上设置@Validated 【重要】

@RestController
@Validated
@RequestMapping("demo")
public class DemoController {
}

第三步 统一异常处理

@ExceptionHandler({ MethodArgumentNotValidException.class })
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public Result requestMissingServletRequest(MethodArgumentNotValidException ex) {
        BindingResult bindingResult = ex.getBindingResult();
        List<String> ls = new ArrayList<>();
        if(bindingResult.hasErrors()){
            List<FieldError> fieldErrors = bindingResult.getFieldErrors();
            // 遍历不合法字段
            fieldErrors.forEach(
                    fieldError -> {
                        ls.add(fieldError.getDefaultMessage());
                        // 获取不合法的字段名和不合法原因
                        log.info("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
                    }
            );
        }
        return Result.commError(ls.toString());
    }

第四步 使用

注解在单个参数上
@PostMapping("/save")
public void save (@Valid @NotEmpty(message = "param不能为空")
  @RequestParam("param")String param){
  //todo...
}
注解在bean上
@Data
public class Param implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private String id;

    /**
     * 名称
     */
    @NotEmpty(message = "名称不能为空")
    private String name;
}
   @PostMapping("/save")
    public Result save(@Validated({FirstGroup.class}) @RequestBody Param param) {
        service.save(param);
        return Result.success();
    }

分组效验
@Data
public class Param implements Serializable{

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    private String id;

    /**
     * 名称
     */
    @NotEmpty(message = "名称不能为空", groups = { FirstGroup.class, SecondGroup.class})
    private String name;
}
public interface FirstGroup {
}
public interface SecondGroup {
}
    @PostMapping("/save")
    public Result save(@Validated({FirstGroup.class}) @RequestBody Param param) {
        service.save(param);
        return Result.success();
    }

常用valid注解

上一篇 下一篇

猜你喜欢

热点阅读