首页 > 编程语言 >java自定义校验注解

java自定义校验注解

时间:2024-09-09 10:23:01浏览次数:12  
标签:java 自定义 校验 return result import message public Result

一个简单的自定义规则校验注释,校验图片名是不是.jpg或者.png

校验规则的类

package com.wzw.pdfconverword.validator;

import com.wzw.pdfconverword.annotation.Img;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
//Img注解没创建的时候会报错
public class ImgValidator implements ConstraintValidator<Img, String> {

    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {

        //s使用了注解的对象的参数值,这里判断它是不是.jpg或者.png的图片
        if (s.contains(".jpg") || s.contains(".png")) {
            return true;
        }
        return false;
    }
}

自定义校验的注解

package com.wzw.pdfconverword.annotation;

import com.wzw.pdfconverword.validator.ImgValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})	//注解使用范围
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ImgValidator.class)	//指定校验规则的类
public @interface Img {
    String message() default "{img.invalid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

测试

使用就和校验的注解一样,修饰方法参数或者对象属性。 测试

@GetMapping("/get")
    public String get(@Img(message = "图片格式不对") String arg){
        System.out.println("------------:"+arg);
        return arg;
    }

java自定义校验注解_自定义

使用全局异常处理,直接返回校验结果

  • 全局异常处理代码
package com.wzw.pdfconverword.handler;

import com.wzw.pdfconverword.entity.Result;
import jakarta.validation.ValidationException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class MyExceptionHandler {


    @ExceptionHandler(ValidationException.class)
    public Result<?> validationException(ValidationException e) {
        return Result.fail(e.getMessage());
    }

}
  • 返回结果封装对象
package com.wzw.pdfconverword.entity;

import com.wzw.pdfconverword.ResultCodeEnum;
import lombok.Data;

@Data // Lombok 插件注解。
public class Result<T> {

    // 状态码。
    private Integer code;

    // 信息。
    private String message;

    // 数据。
    private T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Result() {
    }

    public static <T> Result<T> build(Integer code, String message, T resultData) {

        Result<T> result = new Result<>();

        if (resultData != null){
            result.setData(resultData);
        }

        result.setCode(code);
        result.setMessage(message);

        return result;
    }

    public static Result success(){
        Result result = new Result();
        result.setCode(ResultCodeEnum.SUCCESS.getResultCode());
        result.setMessage(ResultCodeEnum.SUCCESS.getResultMsg());
        return result;
    }

    public static<T> Result<T> success(T resultData){
        Result<T> result = build(ResultCodeEnum.SUCCESS.getResultCode(), ResultCodeEnum.SUCCESS.getResultMsg(), resultData);
        return result;
    }

    public static Result fail(){
        Result result = new Result();
        result.setCode(ResultCodeEnum.FAIL.getResultCode());
        result.setMessage(ResultCodeEnum.FAIL.getResultMsg());
        return result;
    }

    //失败的方法
    public static<T> Result<T> fail(T resultData) {
        return build(ResultCodeEnum.FAIL.getResultCode(), ResultCodeEnum.FAIL.getResultMsg(), resultData);
    }
}

测试返回异常信息

返回成功

java自定义校验注解_自定义_02

标签:java,自定义,校验,return,result,import,message,public,Result
From: https://blog.51cto.com/u_16390833/11959072

相关文章

  • Java基础—运算符篇(从0到1完整详解,附有代码+案例)
    文章目录运算符分类:2.1.算术运算符2.1.1基本算数运算2.1.2复合算数运算2.1.3类型转换2.1.4“+”的三种情况2.2自增自减运算符2.3赋值运算符2.4关系运算符2.5逻辑运算符2.6短路逻辑运算符2.7三元运算符2.8运算的优先级运算符分类:赋值运算符:=算术运算符:+-......
  • 17 Python异常处理(捕获异常、抛出异常、自定义异常)
    本篇是Python系列教程第17篇,更多内容敬请访问我的Python合集当我们编写代码时,可能会遇到各种各样的错误情况,比如除数为零、找不到文件、网络问题等等。为了优雅地处理这些问题,Python提供了异常处理机制。1异常处理的基本结构Python中的异常处理主要依赖于try和ex......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    springboot电影推荐网站摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的电影推荐网站;电影推荐网站的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本电影推荐网站是针对目前电影推荐网站的实际需求,从......
  • Java基础之方法 | 方法概述 | 方法格式 | 方法重载 | 方法的参数传递
    目录什么是方法方法基本使用定义方法格式方法案例定义方法的两个明确案例一案例二案例三方法小结定义方法注意事项调用方法三种形式方法重载方法重载概述方法重载案例案例一案例二案例三方法的参数传递方法参数传递基本类型方法参数传递引用类型什么......
  • (免费源码)计算机毕业设计必看必学 原创定制程序 java、PHP、python、小程序、文案全套
    SSM?中小型药店信息管理系统摘要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论......
  • 审批流程超简单实现(Java版)
    工作流审批功能是办公OA系统核心能力,如果让你设计一个工作流审批系统,你会吗?千万不要小瞧OA内部系统的复杂性,大家可以头脑风暴思考一下实现方案。要明白工作流审批涉及多个用户的任务流转,多个流程分支跳转,虽然是办公内部系统,但是这个系统并不简单如果没有强大的工作流引擎,难以高效扩......
  • Java基础 | 数组 | 一维数组 | 二维数组 | 数组初始化 | 索引
    目录一维数组什么是数组数组定义格式格式一格式二数组初始化数组动态初始化什么是动态初始化动态初始化格式动态初始化格式详解等号左边等号右边数组静态初始化什么是静态初始化静态初始化格式完整版格式简化版格式示例代码数组元素访问什么是索引访问数......
  • Java毕设项目II基于Spring Boot的在线远程考试系统设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育模式的不断......
  • 【JavaScript系列八】—讲述JS学习历程的知识分享!
    前言本篇主要讲述JS中较为重要的一环,函数的用法,深拷贝和浅拷贝的概念和区别,闭包和递归,包括一些案例:例如递归实现斐波那契数列,求阶乘等等一、关于函数定义函数的方式function关键字函数表达式(匿名函数)varfn=function(){}newfunction()函数的调用及其this指向普通函数—......
  • 【JavaScript系列九】—讲述JS学习历程的知识分享!
    前言本篇主要是讲述ES6的新增语法和相关运用一、ES6ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。泛指2015年6月之后发布的版本为什么使用ES6语言更加完善功能更加强大变量提升特性增加了程序运行时的不确定性语法过于......