• SpringBoot


    前言

    jSR303参数校验可以查看之前的文章 SpringBoot - Bean validation 参数校验,这里介绍消息模板的配置。


    具体实现

    Message模板配置

    • /resources/目录下新增ValidationMessages.properties文件(固定文件名),配置Message
    id.valid = id必须是正整数
    

    在这里插入图片描述

    • 全局异常处理器
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.ResponseStatus;
    import javax.servlet.http.HttpServletRequest;
    import javax.validation.ConstraintViolationException;
    
    /**
     * @Description 全局异常统一处理
     * @author coisini
     * @date Aug 9, 2021
     * @Version 1.0
     */
    @ControllerAdvice
    public class GlobalExceptionAdvice1 {
    
        /**
         * 注解校验异常处理器
         * @param req
         * @param e
         * @return
         */
        @ExceptionHandler(ConstraintViolationException.class)
        @ResponseStatus(code= HttpStatus.BAD_REQUEST)
        @ResponseBody
        public UnifyMessage handleConstraintException(HttpServletRequest req, ConstraintViolationException e){
            String requestUrl = req.getRequestURI();
            String method = req.getMethod();
            String message = e.getMessage();
    
            return new UnifyMessage(10001, message, method + " " + requestUrl);
        }
    
    }
    
    • 测试用例
    @RestController
    @RequestMapping("/vaild")
    @Validated
    public class ValidController {
    
        @GetMapping(value = "/test2/{id}")
        public Long test2(@PathVariable @Positive(message = "{id.valid}") Long id) {
            return id;
        }
        
    }
    
    • 测试结果

    在这里插入图片描述

    在这里插入图片描述


    模板参数配置

    这里自定义一个密码校验注解

    • Password 校验注解
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.*;
    
    /**
     * @Description Password 校验注解
     * @author coisini
     * @date Aug 17, 2021
     * @Version 1.0
     */
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE, ElementType.FIELD})
    @Constraint(validatedBy = PasswordValidator.class )
    public @interface PasswordValid {
        String message() default "字段不符合要求";
    
        int min() default 6;
    
        int max() default 32;
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    }
    
    • Password 校验关联类
    import org.apache.commons.lang3.StringUtils;
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    
    /**
     * @Description Password 校验关联类
     * @author coisini
     * @date Aug 17, 2021
     * @Version 1.0
     */
    public class PasswordValidValidator implements ConstraintValidator<PasswordValid, String> {
    
        private Integer min;
        private Integer max;
    
        @Override
        public void initialize(PasswordValid constraintAnnotation) {
            this.min = constraintAnnotation.min();
            this.max = constraintAnnotation.max();
        }
    
        @Override
        public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
            if(StringUtils.isEmpty(s)){
                return true;
            }
    
            return s.length() >= this.min && s.length() <= this.max;
        }
    }
    
    • 消息模板配置
    user.password = password参数错误:当前值是${validatedValue};最大值应该是{max},最小值应该是{min}
    
    • 测试实体
    import lombok.Getter;
    import lombok.Setter;
    import javax.validation.constraints.NotBlank;
    
    @Getter
    @Setter
    public class User {
    
        @NotBlank(message = "account不允许为空")
        private String account;
    
        @PasswordValid(max=30, message = "{user.password}")
        private String password;
    
    }
    
    • 测试用例
    @PostMapping(value = "/test3")
    public void test3(@RequestBody @Validated User user) {
    
    }
    
    • 测试结果

    在这里插入图片描述


    - End -
    梦想是咸鱼
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    TV
    [转载]如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧
    search result
    floating-camera
    HDU 1032.The 3n + 1 problem【注意细节】【预计数据不强】【8月21】
    C语言socket send()数据缓存问题
    Marlin固件之—:基础入门与測试
    java语句顺序有时非常重要
    Android Studio 使用正式签名进行调试
    插入排序、交换排序、选择排序、归并排序、基数排序
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15158391.html
Copyright © 2020-2023  润新知