Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证
如果碰到 @NotEmpty 否则不生效,注意看下 @RequestBody 前面是否加上了@Valid
Validation常用注解汇总
Constraint详细信息@Null被注释的元素必须为 null@NotNull被注释的元素必须不为 null@NotBlank被注释的元素不能为空(空格视为空)@NotEmpty被注释的元素不能为空 (允许有空格)@Size(max, min)被注释的元素的大小必须在指定的范围内@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Pattern(value)被注释的元素必须符合指定的正则表达式@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@DecimalMax(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@AssertTrue被注释的元素必须为 true@AssertFalse被注释的元素必须为 false@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内@Past被注释的元素必须是一个过去的日期@Future被注释的元素必须是一个将来的日期示例
- /**
- * 用户名
- */
- @NotBlank(message = "用户名不能为空")
- private String username;
- /**
- * 用户真实姓名
- */
- @NotBlank(message = "用户真实姓名不能为空")
- private String name;
- /**
- * 密码
- */
- @Pattern(regexp = "^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]))(?=^[^\\u4e00-\\u9fa5]{0,}$).{8,20}$", message = "密码过于简单有被盗风险,请保证密码大于8位,并且由大小写字母、数字,特殊符号组成")
- private String password;
- /**
- * 邮箱
- */
- @NotBlank(message = "邮箱不能为空")
- @Email(message = "邮箱格式不正确")
- private String email;
- /**
- * 手机号
- */
- @NotBlank(message = "手机号不能为空")
- @Pattern(regexp = "^(1[0-9])\\d{9}$", message = "手机号格式不正确")
- private String mobile;
复制代码 Demo
入参对象上,添加注解及说明- package com.vipsoft.web.entity;
- import javax.validation.constraints.NotBlank;
- import javax.validation.constraints.Size;
- import java.io.Serializable;
- /**
- * 定时任务调度
- */
- public class QuartzJob implements Serializable {
- private static final long serialVersionUID = 1L;
- /**
- * 任务序号
- */
- private long jobId;
- /**
- * 任务名称
- */
- @NotBlank(message = "任务名称不能为空")
- @Size(max = 10, message = "任务名称不能超过10个字符")
- private String jobName;
- /**
- * 任务组名
- */
- @NotBlank(message = "任务组名不能为空")
- @Size(max = 10, message = "任务组名不能超过10个字符")
- private String jobGroup;
- /**
- * 调用目标字符串
- */
- private String invokeTarget;
- /**
- * 执行表达式
- */
- private String cronExpression;
- /**
- * cron计划策略 0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行
- */
- private String misfirePolicy = "0";
- /**
- * 并发执行 0=允许,1=禁止
- */
- private String concurrent;
- /**
- * 任务状态(0正常 1暂停)
- */
- private String status;
- /**
- * 备注
- */
- private String remark;
- }
复制代码 Controller @RequestBody 前面必须加上 @Valid 否则不生效- import javax.validation.Valid;
- @RestController
- @RequestMapping("schedule")
- public class ScheduleController {
- private Logger logger = LoggerFactory.getLogger(ScheduleController.class);
- @Autowired
- IQuartzJobService jobService;
- @RequestMapping("/add")
- public ApiResult addTask(@Valid @RequestBody QuartzJob param) throws Exception {
- logger.info("添加调度任务 => {} ", JSONUtil.toJsonStr(param));
-
- return new ApiResult("添加成功");
- }
- }
复制代码 异常处理,统一返回对象,方便前端解析
GlobalExceptionHandler- package com.vipsoft.web.exception;
- import cn.hutool.core.util.StrUtil;
- import com.vipsoft.web.utils.ApiResult;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.validation.BindException;
- import org.springframework.validation.BindingResult;
- import org.springframework.validation.FieldError;
- import org.springframework.validation.ObjectError;
- import org.springframework.web.HttpRequestMethodNotSupportedException;
- import org.springframework.web.bind.MethodArgumentNotValidException;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.RestControllerAdvice;
- import java.util.List;
- /**
- * 全局异常处理器
- */
- @RestControllerAdvice
- public class GlobalExceptionHandler {
- private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
-
- /**
- * 处理自定义异常
- */
- @ExceptionHandler(CustomException.class)
- public ApiResult handleException(CustomException e) {
- // 打印异常信息
- logger.error("### 异常信息:{} ###", e.getMessage());
- return new ApiResult(e.getCode(), e.getMessage());
- }
- /**
- * 参数错误异常
- */
- @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
- public ApiResult handleException(Exception e) {
- if (e instanceof MethodArgumentNotValidException) {
- MethodArgumentNotValidException validException = (MethodArgumentNotValidException) e;
- BindingResult result = validException.getBindingResult();
- StringBuffer errorMsg = new StringBuffer();
- if (result.hasErrors()) {
- List<ObjectError> errors = result.getAllErrors();
- errors.forEach(p -> {
- FieldError fieldError = (FieldError) p;
- errorMsg.append(fieldError.getDefaultMessage()).append(",");
- logger.error("### 请求参数错误:{" + fieldError.getObjectName() + "},field{" + fieldError.getField() + "},errorMessage{" + fieldError.getDefaultMessage() + "}");
- });
- return new ApiResult(6001, errorMsg.toString());
- }
- } else if (e instanceof BindException) {
- BindException bindException = (BindException) e;
- if (bindException.hasErrors()) {
- logger.error("### 请求参数错误: {}", bindException.getAllErrors());
- }
- }
- return new ApiResult(6001, "参数无效");
- }
- /**
- * 处理HttpRequestMethodNotSupporte异常
- * @param e
- * @return
- */
- @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
- public Object methodHandler(HttpRequestMethodNotSupportedException e) {
- // 打印异常信息
- logger.error("### 异常信息:{} ###", e.getMessage());
- return new ApiResult(6000, e.getMessage());
- }
- /**
- * 处理所有不可知的异常
- */
- @ExceptionHandler(Exception.class)
- public ApiResult handleOtherException(Exception e) {
- // 打印异常信息
- logger.error("### 系统内部错误:{} ###", e.getMessage(), e);
- String warnMsg = StrUtil.isEmpty(e.getMessage()) ? "### 系统内部错误 ###" : e.getMessage();
- return new ApiResult(6000, "系统内部错误", e.getMessage());
- }
- }
复制代码 统一返回对像 ApiResult运行结果如下

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |