Hibernate参数校验扩展

Hibernate参数校验

文章目录

          • 一、快速入门
            • 1. 校验bean
            • 2. controller
          • 二、企业实战
            • 2.1. 校验bean
            • 2.2. controller
            • 2.3. 全局异常拦截

一、快速入门
1. 校验bean
package com.gblfy.vo;import org.hibernate.validator.constraints.Length;import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;/*** 校验扩展** @author gblfy* @date 2022/06/06*/
public class ValBean {/*** Bean Validation 中内置的 constraint** @Null 被注释的元素必须为 null* @NotNull 被注释的元素必须不为 null* @AssertTrue 被注释的元素必须为 true* @AssertFalse 被注释的元素必须为 false* @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值* @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值* @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值* @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值* @Size(max=, min=) 被注释的元素的大小必须在指定的范围内* @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内* @Past 被注释的元素必须是一个过去的日期* @Future 被注释的元素必须是一个将来的日期* @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式* Hibernate Validator 附加的 constraint* @NotBlank(message =) 验证字符串非null,且长度必须大于0* @Email 被注释的元素必须是电子邮箱地址* @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内* @NotEmpty 被注释的字符串的必须非空* @Range(min=,max=,message=) 被注释的元素必须在合适的范围内*/private Long id;@Max(value = 20, message = "{val.age.message}")private Integer age;@NotBlank(message = "{username.not.null}")@Length(max = 6, min = 3, message = "{username.length}")private String username;@NotBlank(message = "{pwd.not.null}")@Pattern(regexp = "/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/", message = "密码必须是6~10位数字和字母的组合")private String password;@Pattern(regexp = "^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$", message = "手机号格式不正确")private String phone;@Email(message = "{email.format.error}")private String email;
}
2. controller
package com.gblfy.controller;import com.gblfy.grace.result.GraceJSONResult;
import com.gblfy.vo.ValBean;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 校验控制层** @Author gblfy* @Date 2022-06-06 22:13**/
@RestController
@RequestMapping(value = "/val")
public class ValidateController {@RequestMapping(value = "/val", method = RequestMethod.POST)@ResponseBodypublic GraceJSONResult val(@Valid @RequestBody ValBean bean, BindingResult result) throws Exception {if (result.hasErrors()) {//如果没有通过,跳转提示Map<String, String> map = getErrors(result);return GraceJSONResult.errorMap(map);} else {//继续业务逻辑}return GraceJSONResult.ok();}private Map<String, String> getErrors(BindingResult result) {Map<String, String> map = new HashMap<String, String>();List<FieldError> list = result.getFieldErrors();for (FieldError error : list) {System.out.println("error.getField():" + error.getField());System.out.println("error.getDefaultMessage():" + error.getDefaultMessage());map.put(error.getField(), error.getDefaultMessage());}return map;}
}
二、企业实战
2.1. 校验bean

同上

2.2. controller
package com.gblfy.controller;import com.gblfy.grace.result.GraceJSONResult;
import com.gblfy.vo.ValBean;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;/*** 校验控制层** @Author gblfy* @Date 2022-06-06 22:13**/
@RestController
@RequestMapping(value = "/val")
public class ValidateController {@RequestMapping(value = "/val", method = RequestMethod.POST)@ResponseBodypublic GraceJSONResult val(@Valid @RequestBody ValBean bean) {//TODO 业务处理return GraceJSONResult.ok();}}
2.3. 全局异常拦截
package com.gblfy.exceptions;import com.gblfy.grace.result.GraceJSONResult;
import com.gblfy.grace.result.ResponseStatusEnum;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MaxUploadSizeExceededException;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 统一异常拦截处理* 可以针对异常的类型进行捕获,然后返回json信息到前端*/
@ControllerAdvice
public class GraceExceptionHandler {@ExceptionHandler(MyCustomException.class)@ResponseBodypublic GraceJSONResult returnMyException(MyCustomException e) {e.printStackTrace();return GraceJSONResult.exception(e.getResponseStatusEnum());}@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseBodypublic GraceJSONResult returnMethodArgumentNotValid(MethodArgumentNotValidException e) {BindingResult result = e.getBindingResult();Map<String, String> map = getErrors(result);return GraceJSONResult.errorMap(map);}@ExceptionHandler(MaxUploadSizeExceededException.class)@ResponseBodypublic GraceJSONResult returnMaxUploadSize(MaxUploadSizeExceededException e) {return GraceJSONResult.errorCustom(ResponseStatusEnum.FILE_MAX_SIZE_2MB_ERROR);}public Map<String, String> getErrors(BindingResult result) {Map<String, String> map = new HashMap<>();List<FieldError> errorList = result.getFieldErrors();for (FieldError ff : errorList) {// 错误所对应的属性字段名String field = ff.getField();// 错误的信息String msg = ff.getDefaultMessage();map.put(field, msg);}return map;}
}

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

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

相关文章

后疫情时代,银行从数字化转型到智能化“迁徙”

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 全球数据智能趋势一览 笔者在搜索了众多机构发表的数据智能发展趋势报告&#xff0c;并做了筛选和甄别后&#xff0c;参考了公…

普通二本学校软件工程专业本科毕业的女生,没有考研,选择直接就业现如今过得怎样呐?

第一篇程序人生 在进入大学之前买的联想笔记本电脑被我之前放在窗户边&#xff0c;一个月之前去上班的时候忘记关窗户&#xff0c;下大雨给淋雨进水了&#xff0c;刚好开机密码的几个键盘失灵了&#xff0c;上周末在网上买了一个键盘&#xff0c;终于可以开机了&#xff0c;为…

阿里云交通数据中台解决方案打造“数字化生产力”

数字经济时代&#xff0c;计算、分析、处理等作为“关键生产要素”已成为行业和社会的共识。但是对于交通领域而言&#xff0c;以往端到端的方式进行平台搭建和应用开发已不能适应数字爆炸和产品快速迭代的要求。交通行业在计算分析方面面临着信息采集难、样式杂、变化快、价值…

一次讲清楚,七种分布式事务的解决方案

来源 | moon聊技术责编 | 寇雪芹头图 | 下载于视觉中国什么是分布式事务分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器「分别位于不同的分布式系统的不同节点之上」。一个大的操作由N多的小的操作共同完成。而这些小的操作又分布在不同的服务上。针…

SpringCloud应用在Kubernetes上的最佳实践—开发篇

作者 | 孤弋 阿里云高级技术专家&#xff0c;负责 EDAS 的开发和用户体验优化工作。 前言 近年来&#xff0c;云原生、Kubernetes、微服务、SpringCloud 这些名词在技术圈内不绝于耳&#xff0c;数据显示&#xff0c;使用 SpringCloud 作为微服务的框架&#xff0c;同时选择…

支持批任务的Coscheduling/Gang scheduling

作者&#xff1a;王庆璨 张凯 进击的Kubernetes调度系统&#xff08;一&#xff09;&#xff1a;Scheduling Framework 进击的Kubernetes调度系统&#xff08;二&#xff09;&#xff1a;支持批任务的Coscheduling/Gang scheduling 前言 首先我们来了解一下什么是Coscheduli…

ESLint is disabled since its execution has not been approved or denied yet

我的vs code有安装eslint插件&#xff0c;但是不这道为什么这两天很多代码校验都不起作用了 一顿操作猛如虎&#xff0c;最后发现代码开始的时候有一条黄线 爆出了一个错误 ESLint is disabled since its execution has not been approved or denied yet. Use the light bulb…

13种重要的云原生工具,让交付过程更快

来源 | SDNLAB责编 | 寇雪芹头图 | 下载于视觉中国SUSE收购RancherPure Storage收购PortworxVeeam收购KastenVMware收购OctarineMirantis收购Lens IDE思科收购Banzai CloudNew Relic收购Pixie Labs云原生市场趋于整合........以上是过去一年云原生行业发生的并购案&#xff0c;…

后疫情时代企业将加速向云服务迁移

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; LogicMonitor的新调查结果表明&#xff0c;COVID-19已成为企业快速实施云迁移的强大催化剂&#xff0c;尽管整体情况仍在发展…

会话拦截限制一台手机登录

文章目录1. 流程图2. 流程简述1. 流程图 2. 流程简述 1.前端传递userId和token2.后端接收userId和token3.校验userId和token是否为空4.校验任一为空&#xff0c;则提示“请登录后再继续操作&#xff01;”5.不为空&#xff0c;通过UserId从redis中获取token6.redis中的token与…

HTML a链接下载文件之图片,文件,乱码等问题

我们在做需求的时候&#xff0c;经常会遇到下载文件 前端下载文件一般分为两种方式&#xff1a; 使用 a 链接进行下载&#xff1a; <a herf"url" >下载</a>向后端发送请求进行下载&#xff1a; methods:{downloadReport(item,index){let date item.…

冗余云计算连接:保持组织运行

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 在过去的几个月中&#xff0c;人们目睹了组织将其劳动力转移到“在家工作”模式和远程操作的情况。微软公司报告其云计算服务…

云原生安全厂商小佑科技完成数千万Pre-A轮融资

近日&#xff0c;国内云原生安全领导厂商北京小佑科技宣布完成Pre-A融资&#xff0c;该轮融资由九合创投投资&#xff0c;融资金额达数千万元人民币。此前&#xff0c;小佑科技在2020年8月由达泰资本完成天使轮投资。 如今&#xff0c;云原生已经成为云计算发展的重要趋势&…

杭州湾跨海大桥视频上云,夯实智慧高速“云基建

现阶段&#xff0c;高速公路监控设备覆盖已经有普遍提高&#xff0c;但监控设施的覆盖仅完成了视频的监控功能&#xff0c;没有实现分析提醒功能。传统人工巡检方式工作量大且容易发生事件遗漏、事故发现不及时导致二次事故、人工视频巡检工作量大无法做到实时检测、监控中心绝…

移动端一键登录注册

文章目录1. 用户名密码一键注册登录流程2. 手机号一键注册登录流程1. 用户名密码一键注册登录流程 2. 手机号一键注册登录流程

使用html2Canvas将页面转化为canvas图片,最后长按保存到本地,史上最全 html2canvas 使用 踏坑之旅,没有之一

最近工作中遇到一个需求&#xff0c;类似这样 点击商品二维码&#xff0c;生成一张带有商品图片、标题、描述、二维码等信息的图片&#xff0c;用户长按进行保存。 在使用html2canvas进行项目开发的时候&#xff0c;遇到很多的问题&#xff0c;主要为一下方面&#xff1a; 1、…

饿了么4年+阿里2年:研发路上的一些总结与思考

我是在2014年入职饿了么&#xff0c;从前端和PHP一直做到后端架构和团队&#xff0c;从2014年到2017年陆续负责过公司客服、销售、代理商、支付、清结算、订单这些业务的产研与团队&#xff1b;2018年从业务研发团队抽身&#xff0c;6个人组起一个小组投身机器学习&#xff0c;…

到底谁在使用低代码?钉钉低代码用户画像:非IT人员占8成

编辑 | 宋慧 供稿 | 钉钉 头图 | 付费下载于视觉中国 低代码开发需求到底有多大&#xff1f;谁在使用低代码开发&#xff1f;3月2日&#xff0c;钉钉发布低代码开发者画像&#xff1a;一二线城市的80、90后是低代码开发的主力军&#xff0c;但20岁以下和50岁以上开发者也占比近…

都已经十岁的ApacheDubbo,还能再乘风破浪吗?

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 纵观中国开源历史&#xff0c;你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目。 一方面&#xff0c;2011 …

前后端分离,如何解决跨域(代理模式)、路由拦截(进入页面需要登录)以及请求拦截(登录TOKEN失效)等问题(初学者)

前端时间项目需要发布一个较大的版本&#xff0c;工作比较忙&#xff0c;加了好多个晚上的班&#xff0c;感觉自己有点缺氧了。最近稍微闲下来了&#xff0c;顺便调休了三天&#xff0c;刚刚给家里来了个大扫除&#xff0c;看着这干干净净的小家&#xff0c;心里顿时舒服了很多…