栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot--用hibernate validator手动校验--方法/实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot--用hibernate validator手动校验--方法/实例

原文网址:SpringBoot--用hibernate validator手动校验--方法/实例_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍如何使用validator进行手动校验。

        validator可以进行自动校验,也可以进行手动校验。自动校验见下方“自动校验”。

自动校验

        自动校验的方法:项目中我们经常在请求类上加@NotNull,@NotBlank之类的注解,结合@Valid或者@Validated,即可自动对字段进行校验。自动校验的用法见:SpringBoot--参数校验--@Valid/@Validated--使用/实例_IT利刃出鞘的博客-CSDN博客

依赖

只需引入Spring的Validation即可。


	org.springframework.boot
	spring-boot-starter-validation

它里边依赖了hibernate validator,就是下边这个


	org.hibernate.validator
	hibernate-validator

pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.12.RELEASE
         
    
    com.example
    demo_Knife4j
    0.0.1-SNAPSHOT
    demo_Knife4j
    demo_Knife4j
    
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.projectlombok
            lombok
        

        
            com.github.xiaoymin
            knife4j-spring-boot-starter
            3.0.3
        

        
        
            org.springframework.boot
            spring-boot-starter-validation
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


工具类
package com.example.demo.business.manual.util;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import java.util.Set;


public class ValidateUtil {
    private static final Validator validator =
            Validation.buildDefaultValidatorFactory().getValidator();

    
    public static  void validate(T t) {
        Set> constraintViolations = validator.validate(t);
        if (constraintViolations.size() > 0) {
            StringBuilder validateError = new StringBuilder();
            for (ConstraintViolation constraintViolation : constraintViolations) {
                validateError.append(constraintViolation.getMessage()).append(";");
            }

            throw new ValidationException(validateError.toString());
        }
    }

    
    public static  void validate(T t, Class... groups) {
        Set> constraintViolations = validator.validate(t, groups);
        if (constraintViolations.size() > 0) {
            StringBuilder validateError = new StringBuilder();
            for (ConstraintViolation constraintViolation : constraintViolations) {
                validateError.append(constraintViolation.getMessage()).append(";");
            }

            throw new ValidationException(validateError.toString());
        }
    }
}
配置类
package com.example.demo.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableOpenApi
// @EnableKnife4j
// @EnableSwagger2
public class Knife4jConfig {
    @Bean
    public Docket docket() {
        Docket docket = new Docket(DocumentationType.OAS_30)
                .apiInfo(new ApiInfoBuilder()
                        .title("我的标题")
                        .description("我的描述")
                        // .termsOfServiceUrl("http://www.xx.com/")
                        .contact(new Contact("knife", "https://knife.blog.csdn.net/", "xx@qq.com"))
                        .version("1.0")
                        .build())
                // 分组名称
                .groupName("all")
                .select()
                // 这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.example.demo"))
                .paths(PathSelectors.any())
                .build();

        return docket;
    }
}
Controller
package com.example.demo.business.manual.controller;

import com.example.demo.business.manual.dto.UserDTO;
import com.example.demo.business.manual.group.ValidGroup;
import com.example.demo.business.manual.request.UserAddReq;
import com.example.demo.business.manual.request.UserEditReq;
import com.example.demo.business.manual.request.UserQueryReq;
import com.example.demo.business.manual.util.ValidateUtil;
import com.example.demo.business.normal.vo.UserVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Api(tags = "手动校验")
@RequestMapping("manualValidate")
@RestController
public class ManualController {
    @ApiOperation("添加")
    @PostMapping("/add")
    public UserVO add(@RequestBody UserAddReq userAddReq) {
        UserDTO userDTO = new UserDTO();
        BeanUtils.copyProperties(userAddReq, userDTO);
        // ValidUtil.validate(userDTO);
        ValidateUtil.validate(userDTO, ValidGroup.Add.class);

        // 将数据写到数据库
        userDTO.setId(1L);
        userDTO.setCreateTime(LocalDateTime.now());
        userDTO.setUpdateTime(LocalDateTime.now());

        UserVO userVO = new UserVO();
        BeanUtils.copyProperties(userDTO, userVO);
        return userVO;
    }

    @ApiOperation("修改")
    @PostMapping("/edit")
    public UserVO edit(@RequestBody UserEditReq userEditReq) {
        UserDTO userDTO = new UserDTO();
        BeanUtils.copyProperties(userEditReq, userDTO);
        ValidateUtil.validate(userDTO, ValidGroup.Edit.class);

        // 修改数据库的数据
        UserVO userVO = new UserVO();
        BeanUtils.copyProperties(userEditReq, userVO);
        userVO.setUpdateTime(LocalDateTime.now());
        return userVO;
    }

    @ApiOperation("查找")
    @GetMapping("/find")
    public List find(UserQueryReq userQueryReq) {
        UserDTO userDTO = new UserDTO();
        BeanUtils.copyProperties(userQueryReq, userDTO);
        ValidateUtil.validate(userDTO, ValidGroup.Query.class);

        return new ArrayList<>();
    }

    @ApiOperation("删除")
    @PostMapping("/delete")
    public void delete(Long id) {
        // 将数据库数据删除
    }
}
请求类

添加

package com.example.demo.business.manual.request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel("添加用户")
public class UserAddReq {
    @ApiModelProperty(value = "用户名", required = true)
    private String userName;

    @ApiModelProperty("昵称")
    private String nickName;

    @ApiModelProperty("邮箱")
    private String email;
}

修改

package com.example.demo.business.manual.request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel("修改用户")
public class UserEditReq {
    @ApiModelProperty(value = "用户ID", required = true)
    private Long id;

    @ApiModelProperty(value = "用户名", required = true)
    private String userName;

    @ApiModelProperty("昵称")
    private String nickName;

    @ApiModelProperty("邮箱")
    private String email;
}

查询

package com.example.demo.business.manual.request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;

@Data
@ApiModel(value = "用户实体", description = "用户description")
public class UserQueryReq {

    @ApiModelProperty("用户id")
    private Long id;

    @ApiModelProperty("用户名")
    private String userName;

    @ApiModelProperty("昵称")
    private String nickName;

    @ApiModelProperty("邮箱")
    private String email;

    @ApiModelProperty("创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @ApiModelProperty("修改时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
DTO
package com.example.demo.business.manual.dto;

import com.example.demo.business.manual.group.ValidGroup;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.time.LocalDateTime;

@Data
public class UserDTO {
    
    @Null(groups = ValidGroup.Add.class, message = "用户id必须为空")
    @NotNull(groups = ValidGroup.Edit.class, message = "用户id不能为空")
    private Long id;

    
    @NotBlank(groups = {ValidGroup.Add.class, ValidGroup.Edit.class},
            message = "用户名不能为空")
    private String userName;

    
    private String nickName;

    
    @NotBlank(message = "邮箱不能为空")
    private String email;

    
    @Null(message = "创建时间必须为空")
    private LocalDateTime createTime;

    
    @NotNull(message = "更新时间不能为空")
    private LocalDateTime updateTime;
}
分组
package com.example.demo.business.manual.group;


public interface ValidGroup {
    interface Add {
    }

    interface Edit {
    }

    interface Query {
    }
}
测试

访问:http://localhost:8080/doc.html

测试添加

结果:

后端结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号