@Validated和@Valid简单使用

news/2024/9/30 14:29:41

当使用apifox时,我们需要必传字段做标记,可以使用

@NotEmpty(message = "id不能为空")
同时在入参位置添加 @Valid @RequestBody
其中
@Valid起到关键作用
效果图

 同时在apifox中

 这样测试或者前端去测试接口的时候就知道哪些字段一定要传,哪些是非必要的

@NotEmpty引入jar包import javax.validation.constraints.NotEmpty;
springboot项目可以直接使用
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

  

 在这里两个注解使用哪个注解都是一样的

下面对@Validated的功能进行进一步说明

比如添加操作和更新操作,使用同一个类,类中同一字段进行不同的说明

@NotBlank(groups = OnCreate.class, message = "文档ID不能为空且不能是空白")@Size(min = 5, groups = OnUpdate.class)private String documentId;

  效果图

 

 完整代码

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.java</groupId><artifactId>valid-param</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--tomcat容器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency></dependencies></project>

  代码部分

package com.java;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Main {public static void main(String[] args) {SpringApplication.run(Main.class, args);}
}package com.java;import lombok.Data;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;/*** @Description:* @Author: 邱燮* @Create: 2024/9/30 10:40*/
@Data
public class BizDocReq {/*** 合同文本编号*/@NotEmpty(message = "合同文本编号不能为空")private String bizDocNo;@NotBlank(groups = OnCreate.class, message = "文档ID不能为空且不能是空白")@Size(min = 5, groups = OnUpdate.class)private String documentId;}package com.java;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;import java.util.HashMap;
import java.util.Map;/*** @Description:* @Author: 邱燮* @Create: 2024/9/30 11:02*/
@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<Object> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, Object> response = new HashMap<>();StringBuilder errors = new StringBuilder();ex.getBindingResult().getAllErrors().forEach((error) -> {String errorMessage = error.getDefaultMessage();errors.append(errorMessage).append("; ");});response.put("code", 400);response.put("data", null);response.put("msg", "请求参数不正确: " + errors.toString().trim());return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);}
}public interface OnCreate {
}public interface OnUpdate {
}

  接口层

package com.java;import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;/*** @Description:* @Author: 邱燮* @Create: 2024/9/30 10:43*/
@RestController
public class OperationDataController {@PostMapping("/queryContract")public String queryContract(@Validated @RequestBody BizDocReq bizDocReq) {return "success";}@PostMapping("/documents")public ResponseEntity<String> createDocument(@Validated(OnCreate.class) @RequestBody BizDocReq bizDocReq) {return ResponseEntity.ok("Document created successfully!");}@PutMapping("/updateDocument")public ResponseEntity<String> updateDocument(@Validated(OnUpdate.class) @RequestBody BizDocReq bizDocReq) {return ResponseEntity.ok("Document updated successfully!");}}

  



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

第29篇 在Linux CentOS系统上部署SqlServer数据库,并实现内网穿透

在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具,创建安全隧道将其映射到公网上,获取公网地址,实现在外异地远程连接家里/公司的sqlserver数据库,而无需公网IP,无需设置路由器,亦无需云服务器。 1.安装sql server 下载 SQL Server 2022 (16.x) …

传统编译器与 AI 编译器区别

传统编译器与 AI 编译器区别 接下来,来了解一下 AI 编译器与传统编译器的区别与联系。 1. 区别与联系 1)目标相同:AI 编译器与传统编译器都是通过自动化的方式进行程序优化和代码生成,从而节省大量的人力对不同底层硬件的手动优化。 2)优化方式类似:在编译优化层,AI 编译…

如何解决k8s CNI 子网不够问题

问题现象 CNI 状态 CrashLookBackOff问题原因 默认环境下 k8s 每个 node 的CNI subnet 子网是一个 24位掩码的子网。当集群总结点数超过 255 个将导致 CNI 子网不足。我们有两种方式结局 解决方案 init 集群指定 kube-controller-manager 参数 apiVersion: kubeadm.k8s.io/v1be…

php docker image

Quick referenceMaintained by: the Docker Community⁠Where to get help the Docker Community Slack⁠, Server Fault⁠, Unix & Linux⁠, or Stack Overflow⁠Supported tags and respective Dockerfile links Note: the description for this image is longer than th…

为什么需要 AI 编译器

为什么需要 AI 编译器 随着硬件技术的不断进步,进入了一个新的计算加速时代,这个时代的硬件平台变得越来越复杂和多层次。现代计算加速平台采用了多层架构,包括标量、向量、多核、多包、多机架等不同层次的并行处理能力。这种设计不仅提高了性能,也增加了硬件设计的复杂性。…

apisix dashboard 基本操作

apisix dashboard 基本操作安装1、下载rpm包wget https://github.com/apache/apisix-dashboard/releases/download/v3.0.1/apisix-dashboard-3.0.1-0.el7.x86_64.rpm2、安装apisix-dashboard-3.0.1-0.el7.x86_64.rpm3、启动systemctl start apisix-dashboard 修改WEB登陆账户1…

怎么搭建Plane

Github地址 https://github.com/makeplane/plane环境查看 系统环境# cat /etc/redhat-release CentOS Stream release 9 # uname -a Linux CentOSStream9Zabbix203 5.14.0-391.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 28 20:35:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linu…

实时语音交互中文基准首期测评出炉;美取消 SB-1047 法案,大模型厂商大难不死丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…