/**
* 工号
*/
@TableField(value = "job_number")
@NotNull(message = "工号不能为空")
@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "用户名只能包含数字和英文字母")
private String jobNumber;
@TableField(value = "dept_id")
@Min(value = 1, message = "代销渠道主键至少为1")
private Long deptId;
@NotBlank(message = "渠道类型不能为空")
@Pattern(regexp = "[0123]", message = "只能接受取值为 0、1、2 或 3 的字符串")
private String type;
注意:@Pattern注解使用时,加上@NotBlank 或@ NotNull注解,否则举例 type 字段:
如图:type 传参 null , 结果插入到表中了
1.概述
Java中参数校验的注解来自三方面,分别是
- javax.validation:validation-api,对应包javax.validation.constraints
- org.springframework:spring-context,对应包org.springframework.validation
- org.hibernate:hibernate-validator,对应包org.hibernate.validator.constraints
粗滤的说,使用方法大体一致!不要想太多
2.注解的使用
springboot项目已经内置Maven依赖!其余用下列版本号看合适原因
<!-- validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.7.Final</version>
</dependency>
第一步:类中字段标注注解
@TableName(value = "xxx")
@Data
public class XXX implements Serializable {
/**
* 销售日报表ID
*/
@TableId(value = "sales_daily_report_id", type = IdType.AUTO)
private Long salesDailyReportId;
/**
* 用户姓名
*/
@TableField(value = "user_name")
@NotBlank(message = "用户名不能为空")
@Length(max = 40, message = "用户名不可超过40字符")
private String userName;
//省略其余字段
private static final long serialVersionUID = 1L;
}
第二部: controller层中方法启用注解,使上述类中注解起作用
@RestController
@Api(tags = "XX后台操作", value = "XXController")
@Slf4j
@RequestMapping(value = "/XXXXX")
public class XXXXXController {
@PostMapping("/v1/back")
@ApiOperation(value = "新增内容")
public ResponseResult<String> saveXX(@Valid @RequestBody XXPojo info) {
//注意方法参数上@Valid注解
第三部:启动项目测试起来
3、统一处理异常结果:
一般用最后的少代码的即可!第一个只是便于开发者看详情效果
@RestControllerAdvice
@Slf4j
@Order(2) // 标识执行顺序。较小的值表示较高的执行优先级
public class SelfExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseResult<Object> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
log.error("实例化参数异常\n{}", e);
BindingResult result = e.getBindingResult();
if (result.hasErrors()) {
List<ObjectError> allErrors = result.getAllErrors();
allErrors.forEach(p -> {
FieldError fe= (FieldError) p;
log.info("check fail!:object={},field={},errorMessage={}", fe.getObjectName(),fe.getField(),fe.getDefaultMessage());
});
}
return ResponseResult.fail(BaseResponseCodeEnum.PARAM_IS_INVALID);
}
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseResult<Object> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
log.error("实例化参数异常\n{}", e);
return ResponseResult.fail(BaseResponseCodeEnum.PARAM_IS_INVALID);
}
后续详情可参考下列文章,基本都能解决了遇到的问题:
Spring Boot 数据校验@Valid+统一异常处理_田哥coder的博客-CSDN博客