基于注解的springboot参数分组校验

本文介绍了如何自定义基于注解的分组参数校验,适用于在SpringBoot中不同接口对同一实体类参数需要不同校验规则的情况。通过拦截器实现注解处理,并给出了使用示例,包括自定义的标志性注解和验证注解,以及如何在接口和实体类中应用这些注解。
摘要由CSDN通过智能技术生成

自定一个基于注解的分组参数检查器

分组叫校验参数

实际开发过程中可能遇到这种情况,当你定义了一个实体类作为参数接受的实体,这个实体类在多个接口中被使用,但是每个接口需要对不同的参数做校验,如果使用spring提供的原生的 参数注解校验,会导致所有的接口的参数的校验使用的是同一种校验规则,和实际需求不同,基于实际开发中遇到的需求,本人写了一个基于注解的分组参数校验,拿出来分享。

实际代码

定义的注解,
一、这个注解是一个标志性的注解,该注解作用于方法上,标志该方法的需要开启参数的注解校验


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IsNeedCheck {
   
}

二、这个注解是真正验证的注解

@Target({
   ElementType.FIELD})
@Retention(RUNTIME)
public @interface PropertyCheck {
   

    /**
     * 验证的正则表达式
     * @return
     */
    String regexp();

    /**
     * 注解参数需要验证的方法列表
     * @return
     */
    String[] methodName() default {
   ""};

    /**
     * 错误的提示信息
     * @return
     */
    String message();

}

注解处理:这里使用的是拦截器进行的校验,需要使用的者自定义一个拦截器,抛出的异常是自己定义的异常,使用者可以根据自己的需要自定义异常返回

public class ValidateInterceptor extends HandlerInterceptorAdapter {
   

    private Logger logger = LoggerFactory.getLogger(DispatcherInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
        HttpRequestWrapper wrapper = (HttpRequestWrapper) (request);
        Map<String, Object> valueMap = wrapper.body2ParamMap(request);
        /** 不是注解到方法上 ,直接执行**/
        if (!(handler instanceof HandlerMethod))  return true;

        /** 有该注解则表明该接口需要进行参数校验**/
        Method method = ((HandlerMethod) handler).getMethod();
        IsNeedCheck needCheck = method.getAnnotation(IsNeedCheck.class);
        if(needCheck == null){
   return true;}

        logger.info(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值