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

相关推荐
石山代码2 小时前
ArrayList / HashMap / ConcurrentHashMap
java·开发语言
AskHarries3 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
daidaidaiyu4 小时前
ThingsBoard 规则链系统源码分析和自定义定时器
java
小毛驴8505 小时前
spring-boot-maven-plugin,maven-compiler-plugin 功能对比
java·python·maven
csdn_aspnet5 小时前
Java 霍尔分区算法(Hoare‘s Partition Algorithm)
java·开发语言·算法
霸道流氓气质5 小时前
通义灵码 IDEA 插件完全使用指南
java·ide·intellij-idea
诸葛务农5 小时前
道路行驶条件下电动汽车永磁电机的有效使用寿命及永磁体的失效和回收再利用(下)
java·开发语言·算法
Percep_gan5 小时前
Java8中的stream的测试使用
java
砍材农夫5 小时前
物联网实战:Spring Boot MQTT | MQTT 设备模拟器演示(附源码)
java·spring boot·后端·物联网·spring·netty
EAIReport6 小时前
Spring AI 详解:Java 开发者快速落地 AI 应用
java·人工智能·spring