Validation进行参数校验

Validation进行参数校验


各位同袍们,你们好呀!!!我是一个才入java开发者行的萌新,今天研究了一下 Validation的一个校验框架,为了怕自己遗忘掉,所以在此记录一下,同时也希望能帮到各位同袍们!!!!!!好了,不多说,开始记录!!

首先需要导入一个它的依赖框架

它对ben进行校验
在这里插入图片描述
@NotBlank 就是它的验证注解 message 就是它的错误提示消息,可以自定义

它的注解有如下:
在这里插入图片描述
自定义错误处理

Spring Boot的Controller方法中可以传一个BindingResult或者Errors类型的参数

@RestController
public class BookController {
    @PostMapping("/book")
    public Book getBook(@Valid Book book, BindingResult result, HttpServletResponse response) {
        if (result.hasErrors()) {
            result.getAllErrors().forEach((error) -> {
                FieldError fieldError = (FieldError) error;
                // 属性
                String field = fieldError.getField();
                // 错误信息
                String message = fieldError.getDefaultMessage();
                System.out.println(field + ":" + message);
            });

        }
        // ...
        return book;
    }
}

Spring Boot的异常处理+Bean Validation

Spring Boot 中有一个专门处理错误信息的一个类叫做ResponseEntityExceptionHandler。其中有很多关于400的错误处理,也就是参数错误的处理,其中就有一个专门用来处理没有通过校验的参数的方法。我们重写这个类的这个方法即可。

@ControllerAdvice   // Spring 的异常处理的注解
public class BadRequestExceptionHandler extends ResponseEntityExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(getClass());


    @Override
    protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {

        Map<String, String> messages = new HashMap<>();
        BindingResult result = ex.getBindingResult();
        if (result.hasErrors()) {
            List<ObjectError> errors = result.getAllErrors();
            for (ObjectError error : errors) {
                FieldError fieldError = (FieldError) error;
                messages.put(fieldError.getField(), fieldError.getDefaultMessage());
            }
            logger.error(messages.toString());
        }
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messages);
    }
}

到此结束,希望能帮助你们,同时也对自己加深印象

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lombok并不提供参数校验的功能,但是我们可以结合使用Lombok和Java Bean Validation API来实现参数校验Java Bean Validation API提供了一套API,可以在JavaBean中使用注解来进行参数校验。我们可以在Lombok生成的Getter和Setter方法上添加注解,通过使用Java Bean Validation API进行参数校验。 举个例子,我们可以在一个User类的属性上添加注解@NotNull来表示该属性不能为空: ```java import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotNull; @Getter @Setter public class User { @NotNull(message = "用户名不能为空") private String username; private String password; } ``` 接下来,我们可以在调用Setter方法之前对参数进行校验: ```java import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; public class UserService { private Validator validator; public UserService() { ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); validator = validatorFactory.getValidator(); } public void addUser(User user) { Set<ConstraintViolation<User>> violations = validator.validate(user); if (!violations.isEmpty()) { throw new ConstraintViolationException(violations); } // 添加用户 } } ``` 在上面的代码中,我们首先获取一个Validator对象,然后在添加用户时调用validate方法进行参数校验。如果有校验不通过的情况,我们可以抛出一个ConstraintViolationException异常来提示用户。 需要注意的是,为了使用Java Bean Validation API进行参数校验,我们需要在项目中添加javax.validation:validation-api和Hibernate Validator的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值