validation 参数校验和统一异常处理

文章目录

            • 1. 引入依赖
            • 2. 校验规则
            • 3. 规则使用
            • 4. 自定义异常类
            • 5. 统一返回对象封装
            • 6. 统一异常对象
            • 7. 统一异常枚举
            • 8. 前端form表单输入,自动触发校验

1. 引入依赖
      <!--参数校验--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
2. 校验规则
@NotNull(message = "【每页页码】不能为空")private int page;@NotNull(message = "【每页条数】不能为空")@Max(value = 100,message = "【每页条数】不能超过100")
3. 规则使用
 public CommonResp list(@Valid EbookQueryReq req) {}
4. 自定义异常类
package com.jiawa.wiki.controller;import com.jiawa.wiki.exception.BusinessException;
import com.jiawa.wiki.resp.CommonResp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;/*** 统一异常处理、数据预处理等*/
@ControllerAdvice
public class ControllerExceptionHandler {private static final Logger LOG = LoggerFactory.getLogger(ControllerExceptionHandler.class);/*** 校验异常统一处理* @param e* @return*/@ExceptionHandler(value = BindException.class)@ResponseBodypublic CommonResp validExceptionHandler(BindException e) {CommonResp commonResp = new CommonResp();LOG.warn("参数校验失败:{}", e.getBindingResult().getAllErrors().get(0).getDefaultMessage());commonResp.setSuccess(false);commonResp.setMessage(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());return commonResp;}
5. 统一返回对象封装
package com.jiawa.wiki.resp;public class CommonResp<T> {/*** 业务上的成功或失败*/private boolean success = true;/*** 返回信息*/private String message;/*** 返回泛型数据,自定义类型*/private T content;public boolean getSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getContent() {return content;}public void setContent(T content) {this.content = content;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("ResponseDto{");sb.append("success=").append(success);sb.append(", message='").append(message).append('\'');sb.append(", content=").append(content);sb.append('}');return sb.toString();}
}
6. 统一异常对象
package com.jiawa.wiki.exception;public class BusinessException extends RuntimeException{private BusinessExceptionCode code;public BusinessException (BusinessExceptionCode code) {super(code.getDesc());this.code = code;}public BusinessExceptionCode getCode() {return code;}public void setCode(BusinessExceptionCode code) {this.code = code;}/*** 不写入堆栈信息,提高性能*/@Overridepublic Throwable fillInStackTrace() {return this;}
}
7. 统一异常枚举
package com.jiawa.wiki.exception;public enum BusinessExceptionCode {USER_LOGIN_NAME_EXIST("登录名已存在"),LOGIN_USER_ERROR("用户名不存在或密码错误"),VOTE_REPEAT("您已点赞过"),;private String desc;BusinessExceptionCode(String desc) {this.desc = desc;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}
8. 前端form表单输入,自动触发校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html-表单的应用

<!-- readonly 只读 --><p>名字: <input type"text" name"username1" value"wang洪亮" readonly></p><!-- disabled 禁用 &#xff0c; 按钮等地方也能用 --><p>性别:<input type"radio" v…

阿里研究员吴翰清:世界需要什么样的智能系统?

阿里妹导读&#xff1a;吴翰清&#xff0c;被大家亲切地称为“小黑”“道哥”。他是阿里巴巴研究员&#xff0c;更是一位“白帽黑客”。15岁&#xff0c;考入西安交大少年班&#xff0c;毕业后应聘阿里。23岁&#xff0c;成为阿里最年轻的高级技术专家。32岁&#xff0c;被评选…

咱们从头到尾说一次 Java 垃圾回收

之前上学的时候有这个一个梗&#xff0c;说在食堂里吃饭&#xff0c;吃完把餐盘端走清理的&#xff0c;是 C 程序员&#xff0c;吃完直接就走的&#xff0c;是 Java 程序员。 确实&#xff0c;在 Java 的世界里&#xff0c;似乎我们不用对垃圾回收那么的专注&#xff0c;很多初…

Ant Design Vue页面数据复制

页面编辑时复制对象&#xff0c;修改表单时&#xff0c;不影响列表数据 /*** 空校验 null或""都返回true*/public static isEmpty (obj: any) {if ((typeof obj string)) {return !obj || obj.replace(/\s/g, "") ""} else {return (!obj || …

html-表单初级验证

<!-- placeholder 输入框 提示信息required 非空判断pattern 正则表达式--><p>名字: <input type"text" name"username1" placeholder"请输入名字" required></p><!-- pattern 正则表达式常用正则表达式…

如何将Elasticsearch的快照备份至OSS

前言 Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎。它可以在近实时条件下&#xff0c;存储&#xff0c;查询和分析海量的数据。它还支持将快照备份至HDFS/S3上面&#xff0c;而阿里云OSS兼容S3的API&#xff0c;本文将介绍如何使用ES的Repository-S3插件将快照备…

你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!...

作者 | 刘春明责编 | Carol出品 | CSDN 云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国目前公司为了降低机器使用成本&#xff0c;对所有的AWS虚拟机进行了盘点&#xff0c;发现利用率低的机器中&#xff0c;有一部分是测试团队用作Jenkins S…

Ant Design Vue 表格数据按树型展示

/*** 使用递归将数组转为树形结构* 父ID属性为parent*/public static array2Tree (array: any, parentId: number) {if (Tool.isEmpty(array)) {return [];}const result [];for (let i 0; i < array.length; i) {const c array[i];// console.log(Number(c.parent), Num…

长脸了!阿里云这位英雄拿下了世界第一

阿里云数据库又被顶级机构点名了&#xff01; 近日&#xff0c;全球最知名的数据管理系统评测标准化TPC组织公布了数据库领域分析性能基准测试最新排名&#xff0c;阿里云超大规模分析型数据库AnalyticDB登上榜首&#xff0c;是全球首个通过TPC严格审计认证的云数据库产品。 …

css-第一个CSS

建议使用分离写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- <style>可以编写css的代码&#xff0c;每一个声明&#xff0c;最好使用分号结尾语法:选择器 {声…

跟面试官侃了半小时 MySQL 事务,把原子性、一致性、持久性的实现都讲完了

来源 | 阿丸笔记封图| CSDN下载于视觉中国提到MySQL的事务&#xff0c;我相信对MySQL有了解的同学都能聊上几句&#xff0c;无论是面试求职&#xff0c;还是日常开发&#xff0c;MySQL的事务都跟我们息息相关。而事务的ACID&#xff08;即原子性Atomicity、一致性Consistency、…

阿里云Link TEE获得全球首款GlobalPlatform TEE全配置安全认证

2019年7月12日&#xff0c;阿里云Link TEE正式获得由国际标准组织GlobalPlatform&#xff08;以下简称GP&#xff09;颁发的TEE安全评估认证证书&#xff0c;也成为全球首款获得GP TEE全配置&#xff08;支持TEE Time and Rollback PP-Module和TEE Debug PP-Module&#xff09;…

vue-cli多环境配置

# 创建多环境配置文件 .env.dev添加内容&#xff1a; NODE_ENVdevelopment VUE_APP_SERVERhttp://localhost:8080.env.pord添加内容&#xff1a; NODE_ENVproduction VUE_APP_SERVERhttp://gblfy.com:8080在package.json修改如下 "scripts": {"serve-dev":…

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务&#xff0c;三大能力获得突破 1. 什么是 HTTPDNS &#xff1f; 传统的 DNS&#xff08;Domain Name System&#xff09;使开发者常面临着域名劫持、调度不精准的问题。 HTTPDNS 使用 HTTP 协议替换常用的 UDP 协议&#…

css-四种css导入方式

一、行内样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!-- 行内样式&#xff1a;在标签元素中&#xff0c;编写一个style属性&#xff0…

是!“用Python的,全是假程序员”!HR:太真实……

某热门网站最近有一个话题引起热议&#xff1a;“用Python的&#xff0c;全是假程序员&#xff01;”题主觉得&#xff0c;Python程序员写代码量太少&#xff01;论编程能力&#xff0c;根本打不过其他程序员。那么&#xff0c;各类编程语言的程序员到底谁更强&#xff1f;我们…

【译】用SQL统一所有:一种有效的、语法惯用的流和表管理方法

现在还没有一个统一的流式SQL语法标准&#xff0c;各家都在做自己的。本文在一些业界应用的基础上提出了一个统一SQL语法的建议。Spark同样存在这个问题&#xff0c;社区版本在流式SQL上迟迟没有动作。EMR Spark在今年上半年提供了自己设计版本的流式SQL支持&#xff0c;也会在…

透过 In-memory Channel 看 Knative Eventing 中 Broker/Trigger 工作机制

In-memory Channel是当前Knative Eventing中默认的Channel, 也是一般刚接触Knative Eventing首先了解到的Channel。本文通过分析 In-memory Channel 来进一步了解 Knative Eventing 中Broker/Trigger事件处理机制。 事件处理概览 我们先整体看一下Knative Eventing 工作机制示…

css-三种基本选择器

一、标签选择器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>/* 标签选择器&#xff0c;会选择到页面上所有的这个标签的元素 */h1{color: #12ec4e;background: …

你知道吗?其实 Oracle 直方图自动统计算法存在这些缺陷!(附验证步骤)

作者 | 吴海存责编 | Carol出品 | CSDN 云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;封图| CSDN下载于视觉中国在某些场景下&#xff0c;表中某一列的数据分布会比较崎岖&#xff0c;使得CBO(cost base optimizer)在评估执行计划的时候可能会出现误差&#xff0c;从…