SpingBoot整合Swagger和Hibernate-Validate练习

需求:用SpingBoot+Swagger+Hibernate-Validate集成一个demo,用Swagger查看Controller的接口文档。Swagger接口包括Controller的请求和返回,用Hibernate-Validate校验Controller的请求参数的合法性。目前只需要校验非空即可。

1.新建一个Springboot项目,在Pom文件中引入依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

2.创建一个实体类 User.java,并在字段上添加校验注解

java 复制代码
package com.example.swaggerdemo.domain;

import javax.validation.constraints.*;

public class User {

    @NotBlank(message = "名称不能为空哦")
    private String name;

    @NotNull(message = "年龄不能为空哦")
    @Max(message = "最大为150哦",value = 150)
    @Min(message = "最小为0哦",value = 0)
    private Integer age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

@NotBlank 只能注解String字符串类型 @NotNull可以注解在Integer类型

3.在启动类上添加swagger注解,开启swagger

java 复制代码
package com.example.swaggerdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.oas.annotations.EnableOpenApi;

@SpringBootApplication
@EnableOpenApi
public class SwaggerdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SwaggerdemoApplication.class, args);
    }

}

@EnableOpenApi 注解用于开启swagger

4.编写UserController控制类

java 复制代码
package com.example.swaggerdemo.controller;

import com.example.swaggerdemo.domain.User;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/system/user")

//@Api(tags = "用户管理",value = "用户管理")
@Tag(name="用户管理")
public class UserController {

    //@ApiOperation(value = "获取员工信息",notes = "传入字段不能为空哦")
    @Operation(tags = "获取员工信息",summary = "传入字段不能为空哦")
    @PostMapping("/getMessage")
    public String getMessage(@RequestBody @Validated User user){
        return "成功啦--名字:"+user.getName()+"年龄:"+user.getAge();
    }
}

5.编写统一异常处理控制器

java 复制代码
package com.example.swaggerdemo;

import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 处理POST请求参数校验异常
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String,Object>> validExceptionHandler(MethodArgumentNotValidException e) {
        List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
        Map<String, Object> errorMap = fieldErrors.stream()
                .collect(Collectors.toMap(item -> item.getField(), item -> item.getDefaultMessage()));
        return ResponseEntity.badRequest().body(errorMap);
    }
}

6.效果

在浏览器访问http://localhost:9999/swagger-ui/

使用接口测试工具ApiPost发送请求


7.源码

Gitee仓库:https://gitee.com/yangxumin/springbootswagger.git

相关推荐
一瓢一瓢的饮 alanchan5 小时前
Flink原理与实战(java版)#第1章 Flink快速入门(第一节IDE词频统计)
java·大数据·flink·kafka·实时计算·离线计算·流批一体化计算
java_logo5 小时前
Docker 容器化部署 QINGLONG 面板指南
java·运维·docker·容器·eureka·centos·rabbitmq
那我掉的头发算什么5 小时前
【javaEE】多线程--认识线程、多线程
java·jvm·redis·性能优化·java-ee·intellij-idea
Pluchon5 小时前
硅基计划6.0 JavaEE 叁 文件IO
java·学习·java-ee·文件操作·io流
程序员卷卷狗5 小时前
联合索引的最左前缀原则与失效场景
java·开发语言·数据库·mysql
纪莫5 小时前
技术面:SpringCloud(SpringCloud有哪些组件,SpringCloud与Dubbo的区别)
java·spring·java面试⑧股
会编程的吕洞宾6 小时前
Java中的“万物皆对象”:一场编程界的哲学革命
java·后端
会编程的吕洞宾6 小时前
Java封装:修仙界的"护体罡气"
java·后端
豆沙沙包?6 小时前
2025年--Lc231-350. 两个数组的交集 II-Java版
java·开发语言
好学且牛逼的马6 小时前
【SSM 框架 | day27 spring MVC】
java