java参数校验

引入依赖

 <!--参数效验--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><!--@Length参数效验--><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId></dependency>

前端参数请求类SysMenu

package com.sky.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;/*** 菜单权限表 sys_menu*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SysMenu extends BaseEntity{private static final long serialVersionUID = 1L;/** 菜单ID */private Long menuId;/** 菜单名称 */@Length(min=4,max=12,message = "菜单名称在4到12之间")@NotBlank(message = "menuName 不能为空")private String menuName;/** 父菜单ID */private Long parentId;/** 显示顺序 */private String orderNum;/** 菜单URL */@Length(min=4,max=12,message = "url在4到12之间")@NotBlank(message = "url 不能为空")private String url;/** 打开方式(menuItem页签 menuBlank新窗口) */private String target;/** 类型(M目录 C菜单 F按钮) */private String menuType;/** 菜单状态(0显示 1隐藏) */private String visible;/** 是否刷新(0刷新 1不刷新) */private String isRefresh;/** 权限字符串 */private String perms;/** 菜单图标 */private String icon;/** 子菜单 */private List<SysMenu> children = new ArrayList<SysMenu>();}

参数校验常用注解

除了前四个 @Null,@ NotNull,@ NotBlank,@NotEmpty外,其他所有的注解,传 null 时都会被当作有效处理

注解常用参数值:message(校验不通过反馈信息)

JSR303定义的基础校验类型和Hibernate Validator 中附加的 constraint :@Length,@Range
在这里插入图片描述

全局异常处理@RestControllerAdvice

package com.sky.handler;import com.sky.constant.MessageConstant;
import com.sky.exception.BaseException;
import com.sky.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.validation.ConstraintViolationException;
import java.sql.SQLIntegrityConstraintViolationException;/*** 全局异常处理器,处理项目中抛出的业务异常*/
@RestControllerAdvice   //是一个用于全局异常处理的注解
@Slf4j
public class GlobalExceptionHandler {/*** 捕获业务异常* @param ex    @ExceptionHandler注解用于标识一个方法,该方法用于处理由Spring MVC控制器中抛出的异常。当控制器中的代码抛出异常时,Spring MVC会查找具有@ExceptionHandler注解的方法,并执行该方法来处理异常。* @return*/@ExceptionHandlerpublic Result exceptionHandler(BaseException ex){log.error("异常信息:{}", ex.getMessage());return Result.error(ex.getMessage());}/** 处理sql异常  捕获了之后 控制台就不会输出异常信息 直接抛出到前端了* */@ExceptionHandlerpublic Result exceptionHandler(SQLIntegrityConstraintViolationException ex){//Duplicate entry 'zhansan' for key 'employee.idx_username'String message=ex.getMessage();if(message.contains("Duplicate entry")){//根据空格分隔String[] split=message.split(" ");//取到用户名String username=split[2];String msg=username+"已存在";return Result.error(msg);}else {//引入常量类字符串 方便后期维护  也可以直接写字符串表示return Result.error(MessageConstant.UNKNOWN_ERROR);}}/** 添加效验参数异常处理* */@ExceptionHandler(BindException.class)public Result bindExceptionHandler(BindException e){log.error("出现了异常!{}",e.getMessage());return Result.error(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());}/** 添加效验参数异常处理get请求参数  技巧:控制台报什么错误 就截取错误的类型来进行捕获* */@ExceptionHandler(ConstraintViolationException.class)public Result violatExceptionHandler(ConstraintViolationException e){log.error("出现了异常!{}",e.getMessage());/*截取冒号后面的字符串*/return Result.error(e.getMessage().split(":")[1]);}}

Contrller使用 @Validated @Valid

package com.sky.controller.admin;import com.sky.annotation.RequiresPermissions;
import com.sky.dto.SysMenuQueryDTO;
import com.sky.entity.SysMenu;
import com.sky.result.Result;
import com.sky.service.SysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;@Validated   //对本类的方法开启验证功能
@RestController
@RequestMapping("/admin/system/menu")
@Api(tags = "菜单栏权限接口")
@Slf4j
public class SysMenuContrller {@Autowiredprivate SysMenuService sysMenuService;/*** 查询系统菜单列表*/@GetMapping("/list")@RequiresPermissions("postCreateRule,POST")@ApiOperation("查询菜单列表")public Result<List<SysMenu>> list(SysMenuQueryDTO sysMenuQueryDTO){List<SysMenu> sysMenuList=sysMenuService.selectMenuList(sysMenuQueryDTO);return Result.success(sysMenuList);}/*** 查询系统菜单树列表*/@GetMapping("/treeselect")@ApiOperation("查询菜单树列表")public Result<List<SysMenu>> treeselect(){List<SysMenu> sysMenuList=sysMenuService.menuTreeData();return Result.success(sysMenuList);}/** 新增保存菜单* */@PostMapping("/add")@ApiOperation("新增菜单")public Result addSave(@RequestBody @Valid/*效验后面的参数*/ SysMenu sysMenu){log.info("新增菜单:{}",sysMenu);//验证菜单名称是否重复sysMenuService.insertMenu(sysMenu);return Result.success();}/** 测试参数验证   @NotBlank这个需要和 @Validated 一起使用* */@GetMapping("/addlist")@ApiOperation("参数验证")public Result canshu(@NotBlank(message = "name 不能为空") String name){log.info("参数验证:{}",name);return Result.success();}
}

后端统一返回类result

package com.sky.result;import lombok.Data;
import java.io.Serializable;/*** 后端统一返回结果* @param <T>*/
@Data
public class Result<T> implements Serializable {private Integer code; //编码:1成功,0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result<T> success() {Result<T> result = new Result<T>();result.code = 1;return result;}public static <T> Result<T> success(T object) {Result<T> result = new Result<T>();result.data = object;result.code = 1;return result;}public static <T> Result<T> error(String msg) {Result result = new Result();result.msg = msg;result.code = 0;return result;}}

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

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

相关文章

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

【设计模式--行为型--备忘录模式】

设计模式--行为型--备忘录模式 备忘录模式定义结构案例实现白箱备忘录模式黑箱备忘录模式 优缺点使用场景 备忘录模式 定义 又叫快照模式&#xff0c;在不破坏封装性的前提下&#xff0c;捕获一个对象的对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便…

Java 自定义注解

Java 自定义注解&#xff0c; 以及interface Target Retention Around Before After ProceedingJoinPoint JoinPoint 等用法 注解应用非常广泛&#xff0c;我们自定义注解能简化开发各种各种业务 一、关键字解释 (1) 定义注解时&#xff0c;关键字 interface 来表示注解类的类…

Spring Boot学习随笔- 实现AOP(JoinPoint、ProceedingJoinPoint、自定义注解类实现切面)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十一章、AOP 11.1 为什么要使用AOP 问题 现有业务层开发存在问题 额外功能代码存在大量冗余每个方法都需要书写一遍额外功能代码不利于项目维护 Spring中的AOP AOP&#xff1a;Aspect 切面 Oriented 面向…

竞赛保研 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

【Python 基础】-- 在 mac OS 中安装 多个 python 版本

目录 1、需求 2、实现 2.1 安装 pyenv 2.2 安装 pyenv-virtualenv 2.3 配置环境变量 2.4 创建 python 3.9.9 的环境 2.5 激活环境&#xff0c;在当前项目目录中使用&#xff0c;即执行 python 1、需求 由于项目所依赖的 python 版本有多个&#xff0c;需要在不同的 pyth…

主从reactor多线程实现

现场模型图片&#xff0c;从网上找的 出于学习的目的实现的&#xff0c;如有不对的地方欢迎留言知道&#xff0c;简单实现了http的请求&#xff0c;可通过postman进行访问 启动项目&#xff1a; 返回数据示例 postman请求 附上源码&#xff0c;有问题直接看源码吧

智能优化算法应用:基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于闪电连接过程算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.闪电连接过程算法4.实验参数设定…

Flink实时电商数仓(二)

GitLab的用户创建和推送 在root用户-密码界面重新设置密码添加Leader用户和自己使用的用户使用root用户创建相应的群组使用Leader用户创建对应的项目设置分支配置为“初始推送后完全保护”设置.gitignore文件&#xff0c;项目配置文件等其他非通用代码无需提交安装gitlab proj…

(JAVA)-创建多线程的方式

1.继承Thread类 1.创建一个继承字Thread类的子类 2.重写Thread类的run方法 public class MyThread extends Thread{Overridepublic void run() {for (int i 0; i < 100; i) {System.out.println(getName()"hello");}} }3.创建Thread类的子类对象 4.通过子类对象调…

HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】

一.HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】【鸿蒙专栏-34】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

轻量级购物小程序H5产品设计经典样例

主要是看到这个产品设计的不错值得借鉴特记录如下&#xff1a; 不过大多数购物app都大致相同&#xff0c;这个算是经典样例&#xff0c;几乎都可以复制&#xff0c;我第一次使用&#xff0c;感觉和顺畅。看上去产品是经过打磨的&#xff0c;布局非常好。内容也很丰富。支持异业…

Leetcode—128.最长连续序列【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—128.最长连续序列 实现代码 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> s;for(auto num: nums) {s.insert(num);}int longestNum 0;for(auto num: s) …

LeetCode day27

LeetCode day27 —今天做到树&#xff0c;&#xff0c;&#xff0c;对不起我的数据结构老师啊~~~ 7. 整数反转 给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] &#xff0c…

【AI图集】猫狗的自动化合成图集

猫是一种哺乳动物&#xff0c;通常被人们作为宠物饲养。它们有柔软的毛发&#xff0c;灵活的身体和尖锐的爪子。猫是肉食性动物&#xff0c;主要以肉类为食&#xff0c;但也可以吃一些蔬菜和水果。猫通常在夜间活动&#xff0c;因此它们需要足够的玩具和活动空间来保持健康和快…

Golang(壹)

爱情不需要华丽的言语&#xff0c;只需要默默的行动。 简介 应用领域&#xff1a; 下载vscode 使用vscode Go下载 - Go语言中文网 - Golang中文社区 下载sdk 解压到文件中&#xff0c;打开sdk解压文件 穿插dos操作系统知识点&#xff1a; 测试go语言环境 看到vscode 的目录结…

SpringIOC之AnnotatedElementKey

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Unity学习笔记(零基础到就业)|Chapter01:C#入门

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter01:C#入门 前言一、控制台输入输出语句二、初识变量1.一些好用的tips2.变量声明的固定写法3.变量类型 三、变量的本质1.变量的存储空间2.变量的本质&#xff1a;2进制 四、变量的命名规范1.必须遵守的规则…

centos开机自启动实战小案例

1.编写一个我们需要做事的脚本 #!/bin/bash # 打印 "Hello" echo "Hello,Mr.Phor" # 为了更好的能看到效果 我们把这段文本放置到一个文件中 如果重启能够看到 /a.txt文件 我们实验成功 echo "hahahahahahahaha" > /a.txt #每次开机 执行…

《空气质量持续改善行动计划》发布,汉威科技助力蓝天保卫战

近日&#xff0c;国务院印发《空气质量持续改善行动计划》&#xff0c;这是继2013年“大气十条”之后的第三个国家层面的保卫蓝天行动计划。 计划要求协同推进降碳、减污、扩绿、增长&#xff0c;以改善空气质量为核心&#xff0c;以减少重污染天气和解决人民群众身边的突出大…