JavaBeanVo字段注解校验hibernate.validate

0.字段校验pom.xml依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

1.Controller对象参数添加注解@Valid

import javax.validation.Valid;

// ...

@PostMapping("insert")
    public ResultVo insertClient(@RequestBody @Valid ClientInfoVo clientInfoVo) {
        if(ObjectUtils.isEmpty(clientInfoVo)){
            return ResultVo.fail("新增对象不能为空");
        }
}

2.具体对象

package com.cetc30.center.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;

/**
 * description: 客户端信息VO
 * date: Created in 2021/3/12 14:06
 * author: chen cong
 * version: 1.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "客户端信息", description = "客户端信息")
public class ClientInfoVo {
    /**
     * 主键
     */
    @ApiModelProperty(name = "id", value = "客户端id")
    private String id;

    /**
     * 客户端名称
     */
    @NotEmpty(message = "客户端名称不能为空")
    @Length(min = 1, max = 30, message = "客户端名称应在1-30个字符范围内")
    @ApiModelProperty(name = "clientName", value = "客户端名称", required = true)
    private String clientName;

    /**
     * ip
     */
    @ApiModelProperty(name = "ip", value = "客户端ip", required = true)
    @Pattern(regexp = "^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", message = "请输入正确的客户端Ip地址")
    private String ip;

    /**
     * 端口
     */
    @Min(value = 1024, message = "客户端端口号最小值为1024")
    @Max(value = 65535, message = "客户端端口号最大值为65535")
    @ApiModelProperty(name = "port", value = "客户端端口号", required = true)
    private Integer port;

    /**
     * MAC地址
     */
    @ApiModelProperty(name = "mac", value = "mac地址", required = true)
    @Pattern(regexp = "^[A-F0-9]{2}(-[A-F0-9]{2}){5}$", message = "请输入正确的MAC地址")
    private String mac;


    /**
     * 关联应用id
     */
    @ApiModelProperty(name = "appsId", value = "关联应用id")
    private String appsId;

    /**
     * 关联应用名称
     */
    @ApiModelProperty(name = "appsName", value = "关联应用名称")
    private String appsName;

    /**
     * 部署模式,0离线模式,1在线模式
     */
    @ApiModelProperty(name = "pattern", value = "部署模式,0离线模式,1在线模式")
    private Byte pattern;


    /**
     * 运行状态
     */
    @ApiModelProperty(name = "runStatus", value = "运行状态(run=运行中,notRun=未运行)")
    private String runStatus;

    /**
     * 客户端版本号
     */
    @ApiModelProperty(name = "version", value = "客户端版本号")
    private String version;


    /**
     * 操作用户id
     */
    @ApiModelProperty(name = "userId", value = "操作用户id")
    private String userId;

}

3.pom.xml

<dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.4</version>
        </dependency>

4.自定义注解

4.1注解

package com.xxx.common.constraints;

import com.xxx.common.validator.IpConstraintValidator;
import com.xxx.common.validator.MacConstraintValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author meihongliang
 * @since 2021/10/15 16:18 周五
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IpConstraintValidator.class)
public @interface IpConstraint {
    /**
     * @Description: 错误提示
     */
    String message() default "请输入正确Ip地址";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

4.2注解的实现

package com.xxx.common.validator;

import com.xxx.common.constraints.IpConstraint;
import com.xxx.common.constraints.MacConstraint;
import org.springframework.stereotype.Component;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;

/**
 * @author meihongliang
 * @since 2021/10/15 16:20 周五
 */
public class IpConstraintValidator implements ConstraintValidator<IpConstraint, String> {

    public static final String ipPattern = "^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$";

    @Override
    public void initialize(IpConstraint constraintAnnotation) {

    }

    @Override
    public boolean isValid(String ipString, ConstraintValidatorContext context) {
        System.out.println("reg: " + IpConstraintValidator.ipPattern);
        System.out.println("ipString: " + ipString);
        Pattern pattern = Pattern.compile(IpConstraintValidator.ipPattern);
        return pattern.matcher(ipString).find();
    }
}

5.其实不用自定义注解,有Pattern注解可以解决,如下

@ApiModel(value = "客户端信息", description = "客户端信息")
public class ClientInfoVo {
/**
     * ip
     */
    @ApiModelProperty(name = "ip", value = "客户端ip", required = true)
    @Pattern(regexp = "^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", message = "请输入正确的Ip地址")
    private String ip;

    /**
     * 端口
     */
    @Min(value = 1, message = "客户端端口号最小值为1")
    @Max(value = 65535, message = "客户端端口号最大值为65535")
    @ApiModelProperty(name = "port", value = "客户端端口号", required = true)
    private Integer port;

    /**
     * MAC地址
     */
    @ApiModelProperty(name = "mac", value = "mac地址")
    @Pattern(regexp = "^[A-F0-9]{2}(-[A-F0-9]{2}){5}$", message = "请输入正确的MAC地址")
    private String mac;
}

6.一些正则表达式

为了避免符号对你造成的认知差异,特意换行,前面的^和后面的$都是正则表达式的一部分,希望不知道的同学注意一下,不用造成不必要的理解困难

电话号码正则:
^1[3|4|5|6|7|8|9][0-9]\d{8}$

ip地址正则:
^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$

mac地址正则:
^[A-F0-9]{2}(-[A-F0-9]{2}){5}$

字符串端口范围[1,65535]正则:
^([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5])$

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值