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信息填错,测试结果符合预期 。

文章插图
log日志:
[nio-8080-exec-9] c.l.valid.controller.SysUserController: [邮箱地址不合法]:字段==email 值==1233. 分组校验groups是用来干什么的?因为一个实体不可能只干一种操作,一个实体必然存在增删改查操作,那么问题就来了如果我要根据id进行更新操作,那么id肯定不能为空这时候我还要进行新增操作,因为id是新增数据库操作才产生的,接受数据的时候我肯定是没有id的所以就产生矛盾了那么groups这个参数就起作用了,它可以表示我这个注解属于哪个组,这样就解决这个尴尬的问题了 。
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 解读微服务下的契约测试——看微服务如何完整应用系统验证之道
- HTML-表单标签form详细讲解学习
- python怎么验证代理IP是否有效
- 基于 el-form 封装一个依赖 json 动态渲染的表单控件
- 想验证安装的操作系统是否正版,可以这样找到Win10产品密钥
- OAuth2+JWT 实现权限验证
- 用实验来验证宇宙大爆炸理论的科学家是 大爆炸宇宙学在观测上的依据有
- CSS3伪类:valid和:invalid实现表单校验
- k8s部署高可用配置中心apollo-手动验证成功
- JS 内存管理机制及验证
