自定义注解校验请求参数
时间: 2023-08-29 07:11:19 浏览: 164
自定义注解
你可以使用自定义注解来校验请求参数。下面是一个示例:
首先,创建一个自定义注解类,例如 `@RequestParamValid`:
```java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestParamValid {
String value() default "";
}
```
然后,在你的控制器方法中使用 `@RequestParamValid` 注解来标记需要校验的参数:
```java
@PostMapping("/example")
public String exampleMethod(@RequestParam @RequestParamValid String parameter) {
// ...
}
```
接下来,你可以创建一个切面来处理参数校验逻辑。切面可以使用 Spring 提供的 `HandlerMethodArgumentResolver` 接口来实现:
```java
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
@Component
public class RequestParamValidResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(RequestParamValid.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
// 在这里进行参数校验逻辑,可以使用各种方式来校验参数
// 例如,你可以使用 Hibernate Validator 进行校验
// 如果参数校验失败,可以抛出异常或返回错误信息
// 如果参数校验通过,可以返回参数的值
// 这里只是一个示例,假设参数不能为空
Object argumentValue = webRequest.getParameter(parameter.getParameterName());
if (argumentValue == null || argumentValue.toString().isEmpty()) {
throw new IllegalArgumentException("参数校验失败");
}
return argumentValue;
}
}
```
最后,将切面注册到 Spring 容器中,以便生效。你可以在配置类中使用 `@EnableWebMvc` 注解来开启 Spring MVC 的相关功能:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
private final RequestParamValidResolver requestParamValidResolver;
public WebConfig(RequestParamValidResolver requestParamValidResolver) {
this.requestParamValidResolver = requestParamValidResolver;
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(requestParamValidResolver);
}
}
```
现在,当请求进入控制器方法时,会自动触发参数校验逻辑。如果参数校验失败,将会抛出异常或返回错误信息。如果校验通过,控制器方法将会正常执行。
这只是一个简单的示例,你可以根据实际需求进行更复杂的参数校验逻辑。希望对你有帮助!如有其他问题,请随时提问。
阅读全文