用java的自定义注解实现判断请求参数是否为空从而进行报错
时间: 2023-08-03 18:04:27 浏览: 174
可以通过使用自定义注解和拦截器来实现判断请求参数是否为空,并进行报错提示。具体实现步骤如下:
1. 定义一个注解 `@ParamNotNull`,用于表示该参数不能为空,代码如下:
```java
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamNotNull {
String value() default "";
}
```
2. 定义一个拦截器 `ParamNotNullInterceptor`,用于拦截请求,并判断参数是否为空,代码如下:
```java
public class ParamNotNullInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 获取请求参数列表
Object[] params = ((HandlerMethod) handler).getMethod().getParameters();
for (Object param : params) {
// 判断参数是否加了@ParamNotNull注解
if (param instanceof ServletRequest || param instanceof ServletResponse || param.getClass().isPrimitive() || !param.getClass().isAnnotationPresent(ParamNotNull.class)) {
continue;
}
// 获取参数名
String paramName = ((MethodParameter) param).getParameterName();
// 获取参数值
Object paramValue = request.getParameter(paramName);
// 判断参数值是否为空
if (StringUtils.isEmpty(paramValue)) {
// 报错提示
throw new IllegalArgumentException(paramName + " can not be null");
}
}
return true;
}
}
```
3. 在需要进行参数校验的Controller方法上,加上 `@ParamNotNull` 注解,代码如下:
```java
@PostMapping("/test")
public String test(@ParamNotNull String name) {
return "hello " + name;
}
```
4. 配置拦截器,将 `ParamNotNullInterceptor` 添加到拦截器链中,代码如下:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ParamNotNullInterceptor());
}
}
```
这样,当请求参数为空时,会抛出 `IllegalArgumentException` 异常,并提示参数不能为空。
阅读全文