springboot设置空参数_springboot自定义注解 判断参数是否传递或者为空

1.自定义个注解类

@Target({ElementType.PARAMETER})//参数级别

@Retention(RetentionPolicy.RUNTIME) //注解保留到运行阶段

public@interface ParamsNotNull {

}

@Target

通俗讲,定义放在什么位置,这个是放在参数中

此外还有

1.ElementType.CONSTRUCTOR:用于描述构造器

2.ElementType.FIELD:用于描述域(类的成员变量)

3.ElementType.LOCAL_VARIABLE:用于描述局部变量(方法内部变量)

4.ElementType.METHOD:用于描述方法

5.ElementType.PACKAGE:用于描述包

6.ElementType.PARAMETER:用于描述参数

7.ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention 定义了该Annotation被保留的时间长短,有些只在源码中保留,有时需要编译成的class中保留,有些需要程序运行时候保留。即描述注解的生命周期

此时针对的在运行中,此外还有

1.RetentionPoicy.SOURCE:在源文件中有效(即源文件保留)

2.RetentionPoicy.CLASS:在class文件中有效(即class保留)

2.自定义拦截器,具体判断请求来的参数

/**

* @Description 参数检查注解拦截器*/

public classCheckParamsInterceptor extends HandlerInterceptorAdapter {private static Logger logger = LoggerFactory.getLogger(CheckParamsInterceptor.class);

@Overridepublicboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {if (!(handler instanceof HandlerMethod)) {

logger.warn("UnSupport handler");return true;

}

List list =getParamsName((HandlerMethod) handler);for(String s : list) {

String parameter=request.getParameter(s);if(StringUtils.isEmpty(parameter)){

JSONObject jsonObject= newJSONObject();//这个地方是定义缺少参数或者参数为空的时候返回的数据

jsonObject.put("status", 203);

jsonObject.put("msg", "缺少必要的"+s+"值");

response.setHeader("Content-type", "application/json;charset=UTF-8");

response.setHeader("Access-Control-Allow-Origin", "*");//跨域

response.getWriter().write(jsonObject.toJSONString());return false;

}

}return true;

}

/**

* 获取使用了该注解的参数名称*/

privateList getParamsName(HandlerMethod handlerMethod) {

Parameter[] parameters=handlerMethod.getMethod().getParameters();

List list = new ArrayList<>();for(Parameter parameter : parameters) {//判断这个参数时候被加入了 ParamsNotNull. 的注解//.isAnnotationPresent() 这个方法可以看一下

if(parameter.isAnnotationPresent(ParamsNotNull.class)){

list.add(parameter.getName());

}

}returnlist;

}

3.添加校验的拦截器config

@Configurationpublic classWebMvcConfig implements WebMvcConfigurer {

CheckParamsInterceptor checkSourceInterceptor= newCheckParamsInterceptor();//增加校验拦截器

@Overridepublic voidaddInterceptors(InterceptorRegistry registry) {//这个地方可以定义拦截器的具体的路径

registry.addInterceptor(checkSourceInterceptor).addPathPatterns("/**");

}

}

4.写一个测试类测试一下效果

@RestController

@RequestMapping("/test")public classTestController {

@RequestMapping("/test")//注解不要加,在参数类型前边加上

publicString test(@ParamsNotNull String userId){return "ok";

}

}

这个是当参数为空的时候的校验

这个是没有这个参数属性的时候,其实效果是一样的

这样以后再判断参数是不是为空的时候,直接加个注解就可以了~!就不用再单独判断参数为空啦!

原文链接:https://blog.csdn.net/weixin_37535975/article/details/94443617

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值