springboot参数校验前进行参数解码操作
时间: 2023-07-04 09:10:04 浏览: 127
在Spring Boot中使用参数校验可以使用JSR-303/JSR-349规范中的注解来实现。如果需要在参数校验前进行参数解码操作,可以使用自定义的参数解析器(HandlerMethodArgumentResolver)来实现。
首先,我们需要自定义一个参数解析器,该解析器实现了HandlerMethodArgumentResolver接口,并重写了supportsParameter和resolveArgument方法。
```
public class DecodeResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(Decode.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
String parameterValue = request.getParameter(parameter.getParameterName());
return URLDecoder.decode(parameterValue, "UTF-8");
}
}
```
其中,supportsParameter方法判断该参数是否使用了我们自定义的Decode注解,resolveArgument方法则是对参数进行解码操作。
接下来,我们需要定义一个Decode注解,该注解可以加在Controller的方法参数上,用于标识需要进行解码操作的参数。
```
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Decode {
}
```
最后,我们需要将自定义的参数解析器加入到Spring Boot的参数解析器列表中,可以在WebMvcConfigurer中添加自定义的参数解析器。
```
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new DecodeResolver());
}
}
```
完成以上操作后,我们就可以在Controller的方法参数上使用Decode注解来标识需要进行解码操作的参数了。注意,该解码操作是在参数校验前进行的。
阅读全文