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])$