首页 > 其他分享 >关于数据校验Bean Validation的学习

关于数据校验Bean Validation的学习

时间:2022-11-18 14:57:47浏览次数:45  
标签:return 校验 class Bean import message Validation public

1,导相关依赖

2,常用的Validation注解

@NotNull: 标记字段不能为 null

@NotEmpty: 标记集合字段不为空(至少要有一个元素)

@NotBlank: 标记字段串字段不能是空字符串(即它必须至少有一个字符)

@Min / @Max: 标记数字类型字段必须大于/小于指定的值

@Pattern: 标记字符串字段必须匹配指定的正则表达式

@Email: 标记字符串字段必须是有效的电子邮件地址

还有很多,暂不列举。

3,在实体类中配置,例如:

package com.itcast.ucenter.entity
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; /** * <p> * 用户信息表 * </p> * * @author StarRiver * @since 2022-11-15 */ @Data public class User{
  //标记接口,新增组   public interface Add{

  }

private static final long serialVersionUID = 1L; private Long userId; private String nickName; @NotNull(message = "手机号不能为空") @Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字") @Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误") private String phonenumber; @NotNull(groups={Add.class},message = "密码不能为空")
private String password; }

4,在方法上校验,例如:

 @PostMapping("register")
    public R registerUser(@Valid RegisterVo registerVo) {
        userService.register(registerVo);
        return R.ok();
    }
@Valid注解的作用:是启动自动验证
@Validated注解的作用,自动按组进行校验,1比如:
 @PostMapping("register")
    public R registerUser(@Validated({Add.class}) RegisterVo registerVo) {
        userService.register(registerVo);
        return R.ok();
    }
2,如果使用了这种
    @PostMapping("login")
    public R loginUser(@NotNull(message = "手机号不能为空")
                       @Pattern(regexp = "^[0-9]+$", message = "手机号码只能为数字")
                       @Pattern(regexp = "^1[34578]\\d{9}$" , message = "手机号码格式有误")
                       @RequestParam String phonenumber,
                       @NotNull(message = "密码不能为空")
                       @RequestParam String password) {
        //调用service方法实现登录
        //返回token值,使用jwt生成
        String token = userService.login(phonenumber,password);
        return R.ok().data("token", token);
    }
那么要在类上面加上 @Validated注解,才可以使得参数的校验生效

5,统一异常返回类
package com.itcast.servicebase.exceptionhandler;

import com.itcast.commonutil.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    /**
     * @param e
     * @return
     * @Validated写在方法上会报这个异常数据校验异常返回
     */
    @ExceptionHandler(value = BindException.class)
    public R BindEx(BindException e) {
        List<FieldError> fieldErrors = e.getFieldErrors();
        StringBuilder sb = new StringBuilder();
        for (FieldError fe : fieldErrors) {
            sb.append("属性:")
                    .append(fe.getField())
                    .append("校验不通过,原因:")
                    .append(fe.getDefaultMessage())
                    .append(";");
        }
        return R.error().data("message", sb.toString());
    }

    //@Validated写在类上会报这个异常数据校验异常返回
    @ExceptionHandler(value = ConstraintViolationException.class)
    public R BindHandlerEx(ConstraintViolationException e) {
        Set<ConstraintViolation<?>> set = e.getConstraintViolations();
        List<String> list = set.stream().map(v ->
                        "属性:" + v.getPropertyPath()
                                + ",属性的值:" + v.getInvalidValue()
                                + ",校验不通过的提示信息:" + v.getMessage()
                                + ",消息模板:" + v.getMessageTemplate())
                .collect(Collectors.toList());
        return R.error().data("list", list);
    }

    //自定义异常
    @ExceptionHandler(ShopException.class)
    public R error(ShopException e) {
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }
}

 

6,待学习。

 

标签:return,校验,class,Bean,import,message,Validation,public
From: https://www.cnblogs.com/Galaxy1/p/16903182.html

相关文章

  • lombok,快速生成java bean
    在pom里加个依赖就行  然后在javabean那里加@Data注解  done!......
  • Java:SpringBoot整合hibernate-validator实现入参数据校验
    本文仅实现了api接口基本的参数校验,还有更多的校验场景,可以参考文章底部的参考链接使用starter创建SpringBoot项目,并添加依赖依赖<properties><java.version>1.8<......
  • JSR303校验
    JSR303校验记得添加依赖包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency......
  • 百度定位sdk--报230 uid: -1 appid -1 msg: APP Scode码 校验失败总结
    现象:报这个异常信息: baidumapsdk.demoE/baidumapsdk:AuthenticationErrorerrorcode:230uid:-1appid-1msg:APPScode码校验失败导致问题根本的原因: 在百度......
  • IOC容器的加载过程-Bean的生命周期
    核心模块部分截图:   IOC源码加载过程:1.newAnnotationConfigApplicationContext():         再看:AnnotationConfigApplicationContext()的无......
  • EasyPoi “导入类”校验注解
    @Excel注解value列名默认时列名必须和导入的表头名字一致,否则无法导入fixedId固定列顺序替代列名,列名比较复杂或者有合并情况,建议使用replace替代字典值把......
  • Spring--注解开发定义Bean
    注解开发先看一看之前的bean的做法:所谓注解开发,当然就要用到注解啊,就是在BookDao接口的实现类里面进行注解的定义如图所示:而在.xml文件里面,就需要进行这样一个操作:......
  • beanfactory和factorybean的区别
    BeanFactory是所有Spring Bean的容器根接口,属于IOC容器接口,定义IOC容器管理Bean的规范接口.用于管理Bean(查找Bean以及获取Bean部分元信息) FactoryBean是 一种创建......
  • 查看、校验、归档…带你掌握openGauss账本数据库
    ​摘要:账本数据库融合了区块链思想,将用户操作记录至两种历史表中:用户历史表和全局区块表。本文分享自华为云社区《openGauss账本数据库,你不知道的那些事儿》,作者:Gauss松鼠......
  • 富文本组件 非Element Plus表单组件 自定义组件 触发表单校验
      项目中有很多自己封装的组件,如富文本组件,文件上传,图片上传等。而这些组件在表单中常常会在新增和编辑的场景应用。而且ElementPlus官网展示demo都是基于ElementPlu......