springboot 参数检查使用

  • springboot 项目中自带验证这一套的东西,不需要额外引入其他的jar
  • 首先创建一个项目写一个user 实体 和 controller,其中三个方法分别是单参数,和实体类型的

/**
* 
*user 实体类型
*/
@Data
public class User {
   @NotBlank(groups = {Add.class},message = "111")
   private String name;

   @NotEmpty(groups = Editor.class,message = "222")
   private String addr;

   @Email
   @NotBlank
   private String email;
}

NotBlank 标识不能为空groups 指定新增的时候才进行检查,同时Add 继承了Default 所以@Emal 也会被检查,注意类上需要加上@Validated注解否则不会进行检查

@Validated
@RestController
public class TestController {

    @Autowired
    private Messageutil messageutil;
    @Autowired
    private HttpServletRequest request;
    /**
     * 对单个属性进行检查
     * @param name
     * @param addr
     * @return
     */
    @PostMapping("/registerParams")
    public Map registerParams(@NotEmpty(message = "111") String name, @NotEmpty(message = "222") String addr){
        System.out.println(request.getClass());
        Map<String,Object> result = new HashMap();
        result.put("data",messageutil.getLocaleMessage("111"));
        return result;
    }

    /**
     * 新增
     * @param user
     * @return
     */
    @PostMapping("/addUser")
    public Map addUser( @RequestBody User user){
        Map<String,Object> result = new HashMap();
        result.put("data",messageutil.getLocaleMessage("add.ok"));
        return result;
    }

    /**
     * 修改
     * @param user
     * @return
     */
    @PostMapping("/updateUser")
    public Map updateUser(@Validated(Editor.class) @RequestBody User user){
        Map<String,Object> result = new HashMap();
        result.put("data","修改成功");
        return result;
    }

}
  • 接下来创建两个接口,Add表示新增接口,Editor表示编辑接口,继承了Default接口,这样不在分组中的检查就会被默认执行
    在这里插入图片描述
import javax.validation.groups.Default;
/**
 * 新增分组,继承默认的分组
 */
public interface Add extends Default {
}

import javax.validation.groups.Default;
/**
 * 编辑分组继承默认的分组
 * 使默认的检查注解也会生效
 */
public interface Editor extends Default {
}

将创建一个验证的配置类,采用快速失败模式

/**
 * 快速失败模式: 当有一个条件不符合时直接返回
 */
@Configuration
public class ValidatorConfiguration {


    @Bean
    public Validator validator(){
        ValidatorFactory validatorFactory = Validation
                .byProvider( HibernateValidator.class )
                .configure()
                .failFast( true )//快速失败配置
                .buildValidatorFactory();
        return validatorFactory.getValidator();
    }
    
}

创建一个全局异常处理类,处理异常并且返回提示信息

/**
 *
 *测试类
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    @Autowired
    private Messageutil messageutil;


    @ExceptionHandler(BindException.class)
    public ResponseEntity handle( BindException e){
       String key = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
       return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messageutil.getLocaleMessage(key,null,null));
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity handle1( MethodArgumentNotValidException e){
       String key = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
       return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messageutil.getLocaleMessage(key,null,null));
    }

    @ExceptionHandler(ConstraintViolationException.class)
    public ResponseEntity handle2(ConstraintViolationException e){
        String key = e.getConstraintViolations().iterator().next().getMessage();
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messageutil.getLocaleMessage(key,null,null));
    }

}

接下来就可以优雅的进行参数检查了

  • 非实体参数检查

在这里插入图片描述

实体参数检查测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为user实体中,我们标记了name 在新增的时候才会检查
addr 在编辑的时候才会检查,email 为默认的都会检查
git地址:https://github.com/snail10000/i18n_study.git
代码中还包含了国际化的使用,感兴趣的小伙伴可以研究一下
springboot国际化实践文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值