SpringBoot-表单验证-统一异常处理-自定义验证信息源( 二 )

2.1.4 接口返回封装类import lombok.Data;import lombok.NoArgsConstructor;/** * 操作消息提醒 * @author ludangxin * @date 2021/8/5 */@Data@NoArgsConstructorpublic class CommonResult {/** 状态码 */private int code;/** 返回内容 */private String msg;/** 数据对象 */private Object data;/*** 初始化一个新创建的 CommonResult 对象* @param type 状态类型* @param msg 返回内容*/public CommonResult(Type type, String msg) {this.code = type.value;this.msg = msg;}/*** 初始化一个新创建的 CommonResult 对象* @param type 状态类型* @param msg 返回内容* @param data 数据对象*/public CommonResult(Type type, String msg, Object data) {this.code = type.value;this.msg = msg;if (data != null) {this.data = https://www.isolves.com/it/cxkf/kj/2021-08-11/data;}}/*** 返回成功消息* @return 成功消息*/public static CommonResult success() {return CommonResult.success("操作成功");}/*** 返回成功数据* @return 成功消息*/public static CommonResult success(Object data) {return CommonResult.success("操作成功", data);}/*** 返回成功消息* @param msg 返回内容* @return 成功消息*/public static CommonResult success(String msg) {return CommonResult.success(msg, null);}/*** 返回成功消息* @param msg 返回内容* @param data 数据对象* @return 成功消息*/public static CommonResult success(String msg, Object data) {return new CommonResult(Type.SUCCESS, msg, data);}/*** 返回警告消息* @param msg 返回内容* @return 警告消息*/public static CommonResult warn(String msg) {return CommonResult.warn(msg, null);}/*** 返回警告消息* @param msg 返回内容* @param data 数据对象* @return 警告消息*/public static CommonResult warn(String msg, Object data) {return new CommonResult(Type.WARN, msg, data);}/*** 返回错误消息* @return 错误信息*/public static CommonResult error() {return CommonResult.error("操作失败");}/*** 返回错误消息* @param msg 返回内容* @return 错误消息*/public static CommonResult error(String msg) {return CommonResult.error(msg, null);}/*** 返回错误消息* @param msg 返回内容* @param data 数据对象* @return 错误消息*/public static CommonResult error(String msg, Object data) {return new CommonResult(Type.ERROR, msg, data);}/*** 状态类型*/public enum Type {/** 成功 */SUCCESS(200),/** 警告 */WARN(301),/** 错误 */ERROR(500);private final int value;Type(int value){this.value = value;}public int value() {return this.value;}}}2.1.5 控制器使用@Validated注解标识需要验证的类,使用BindingResult类接收错误信息
import com.ldx.valid.exception.BusinessException;import com.ldx.valid.model.SysUser;import com.ldx.valid.model.ValidationInterface;import com.ldx.valid.util.CommonResult;import lombok.extern.slf4j.Slf4j;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.*;import javax.validation.constraints.NotEmpty;import java.util.ArrayList;import java.util.List;import java.util.Objects;import java.util.stream.Collectors;/** * 用户管理控制器 * * @author ludangxin * @date 2021/8/5 */@Slf4j@RestController@RequestMapping("sys/user")public class SysUserController {private static final List<SysUser> USERS = new ArrayList<>();// 数据初始化static {SysUser user = new SysUser();user.setId(1L);user.setUsername("zhangsan");user.setPhone("13566666666");user.setEmail("example@qq.com");USERS.add(user);SysUser user1 = new SysUser();user1.setId(2L);user1.setUsername("lisi");user1.setPhone("13588888888");user1.setEmail("example1@qq.com");USERS.add(user1);}/*** 新增用户信息* @param sysUser 用户信息* @return 成功标识*/@PostMappingpublic CommonResult add(@Validated @RequestBody SysUser sysUser, BindingResult result) {FieldError fieldError = result.getFieldError();if(Objects.nonNull(fieldError)) {String field = fieldError.getField();Object rejectedValue = https://www.isolves.com/it/cxkf/kj/2021-08-11/fieldError.getRejectedValue();String msg = "[" + fieldError.getDefaultMessage() + "]";log.error("{}:字段=={}t值=={}", msg, field, rejectedValue);return CommonResult.error(msg);}USERS.add(sysUser);return CommonResult.success("新增成功");}}2.1.5 启动测试新增时,故意将email信息填错,测试结果符合预期 。

SpringBoot-表单验证-统一异常处理-自定义验证信息源

文章插图
 
log日志:
[nio-8080-exec-9] c.l.valid.controller.SysUserController: [邮箱地址不合法]:字段==email 值==1233. 分组校验groups是用来干什么的?
因为一个实体不可能只干一种操作,一个实体必然存在增删改查操作,那么问题就来了如果我要根据id进行更新操作,那么id肯定不能为空这时候我还要进行新增操作,因为id是新增数据库操作才产生的,接受数据的时候我肯定是没有id的所以就产生矛盾了那么groups这个参数就起作用了,它可以表示我这个注解属于哪个组,这样就解决这个尴尬的问题了 。


推荐阅读