首页 > 其他分享 >@Validated和@Valid简单使用

@Validated和@Valid简单使用

时间:2024-09-30 14:23:14浏览次数:9  
标签:简单 boot springframework public Valid org import Validated class

当使用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!");
    }

}

  



标签:简单,boot,springframework,public,Valid,org,import,Validated,class
From: https://www.cnblogs.com/q202105271618/p/18441635

相关文章

  • Scala数据结构简单介绍
    数据结构的定义: 1.数组(Array)    (1)定义:        定长数组:newArray[T](数组长度)        变长数组:ArrayBuffer[T]()    (2)示例:        定长数组:valarr1=newArray[Int](3)        变长数组(需提前导包):valarr2=Arr......
  • label-studio的简单使用
    人工标注一、语义角色:Agent:实施动作的主体Action:谓语,动作Patient:承受动作的客体Time:发生动作的时间Location:发生动作的地点二、工具——labelstudio官方网址:OpenSourceDataLabeling|LabelStudio使用工具:labelstudio安装命令:pipinstalllabel-studio启动命令:label-studio访......
  • 实验1_C语言输入输出和简单程序应用编程
    任务1://打印一个字符小人#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");r......
  • 简单的XGBoost案例
    一、前言    今天我们来一起学习一个新的算法模型,XGboost算法:     1、XGBoost的特性        XGBoost(ExtremeGradientBoosting)是一个高效的开源机器学习库,广泛应用于结构化数据的分类和回归问题。它基于梯度提升算法,利用决策树的集成方法来提高模型的......
  • WPF下使用FreeRedis操作RedisStream实现简单的消息队列
    RedisStream简介RedisStream是随着5.0版本发布的一种新的Redis数据类型:高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据添加时被唤醒并开始......
  • unity常见的两种简单易上手的移动方式
    第一,使用transform的translate进行移动。使用方法:对象.transform.translate(方向向量*normalized*Time.deltaTime*speed);normalized是将这个方向向量归一化,即模长等于1,这是为了控制速度等于后面的speed,如果不加也能够实现移动,但是速度不便于控制。Time.deltaTime是每一......
  • 【玩转Linux】如何简单快速理解权限?
     学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天更新Linux部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是权限~目录 循环渐进Forward-CSDN博客shell命令以及运行......
  • ✨简简单单写程序
    每个伟大的梦想,都有一个微不足道的开始。程序的设计目标和流程设计一个程序是为了让计算机始终不渝地遵循指令,以完成特定的任务。为了能让计算机听懂指令,我们编写程序来与计算机交流。编程方法使用IDE(集成编辑环境)例如:DevC++/CodeBlocks。使用洛谷在线编程https:......
  • 【FPGA开发】一文轻松入门Modelsim的简单操作
    Modelsim仿真的步骤    (1)创建新的工程。    (2)在弹出的窗口中,确定项目名和工作路径,库保持为work不变。    (3)添加已经存在的文件(rtl代码和tb代码)。    如果这里关闭后,还想继续添加,也可以直接在界面空白处右键进行添加。    加错......
  • 实验1_C语言输入输出和简单程序应用编程
    task.1//打印一个字符小人#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");return0;}  task.1-1&1-2#include<stdio.h>intmain(){printf(&qu......