吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 438|回复: 11
收起左侧

[Java 原创] 非入参bean参数自定义校验

[复制链接]
yjjmhh 发表于 2024-11-18 17:30
话不多说,直接上代码:



package org.example.utils;

import javax.valIDAtion.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Set;

/**
* @Description 校验参数类
* @AuThor Administrator
* @date 2024/11/18 10:14
* @version 1.0
**/
public class ValidatorUtil {

    public static <T> void validate(T object){
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        Set<ConstraintViolation<T>> violations = validator.validate(object);
        if(!violations.isEmpty()){
            throw new ConstraintViolationException(violations);
        }
    }
}


<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
    <version>2.0.2</version>
</dependency>

  支持任意类中校验

package org.example.bean;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
@Data
public class Test{
    /**
     * 主键
     *
     * @mbg.generated
     */
    @ApiModelProperty(value = "主键")
    private Integer id;

    /**
     * 名称
     *
     * @mbg.generated
     */
    @NotBlank(message = "名称不能为空")
    @ApiModelProperty(value = "名称")
    private String name;

    /**
     * 编号
     *
     * @mbg.generated
     */
    @NotBlank(message = "编号不能为空")
    @ApiModelProperty(value = "编号")
    private String code;

    /**
     * 创建时间
     *
     * @mbg.generated
     */
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     *
     * @mbg.generated
     */
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date updateTime;

}

在需要校验的 加入 ValidatorUtil.validate(object); 即可

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dingyinhua 发表于 2024-11-20 09:34
可以改进哈,直接获取到验证失败的结果
    public static <T> String validateJSR303(T t) {
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<T>> validate = validator.validate(t);
        StringBuilder result = new StringBuilder();
        for (ConstraintViolation<T> violation : validate) {
            result.append(violation.getMessage()).append(";");
        }
        return result.toString();
    }
苏紫方璇 发表于 2024-11-18 18:56
插入代码的方法可以参考置顶帖
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)
AlbusGellert 发表于 2024-11-18 19:07
 楼主| yjjmhh 发表于 2024-11-19 09:23
苏紫方璇 发表于 2024-11-18 18:56
插入代码的方法可以参考置顶帖
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn ...

学习到了,简洁明了
NineSu 发表于 2024-11-19 10:00
mark。 已学习
mx5017 发表于 2024-11-19 11:12
学习,感谢分享
allxxall 发表于 2024-11-19 20:49
适合使用在大多数非控制层参数校验环境,部分复杂的校验逻辑还是需要手动代码分析实现
点歌赞
 楼主| yjjmhh 发表于 2024-11-20 14:08
dingyinhua 发表于 2024-11-20 09:34
可以改进哈,直接获取到验证失败的结果
    public static  String validateJSR303(T t) {
        Valid ...

是的,这种方式能获取全局参数的校验结果,后续统一处理
Fhhjjh36678 发表于 2024-11-20 14:48
可以的,虽然有类似的框架,但是自己了解原理并符合自己要求是很好的,加油
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-7 20:14

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表