springboot拦截器处理 把前端默认空字符串参数替换成null值
时间: 2024-10-17 19:15:25 浏览: 30
SpringBoot拦截器实现登录拦截的方法示例
Spring Boot 中拦截器 (Interceptor) 可以用于对请求的处理过程进行增强,包括修改请求参数。如果你想要替换前端传递来的空字符串参数为 `null`,可以在全局拦截器 (Global Interceptor) 或者特定控制器方法级别的 `@ControllerAdvice` 中编写自定义的拦截逻辑。
举个例子,你可以创建一个 `HandlerMethodArgumentResolver` 的子类,并重写 `resolveArgument` 方法:
```java
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.Map;
public class NullStringToNullArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(Method method, Class<?> parameterType, Annotation[] annotations) {
// 检查是否是 String 类型的参数
return parameterType.isAssignableFrom(String.class);
}
@Override
public Object resolveArgument(Method method, TypeDescriptor argumentType, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, String> pathVariables,
HttpServletRequest request, WebDataBinderFactory binderFactory, ModelAndViewContainer mavContainer) throws Exception {
Map<String, String[]> parameters = request.getParameterMap();
for (String paramName : parameters.keySet()) {
if (method.getParameterTypes()[0] == String.class && parameters.get(paramName)[0].equals("")) {
parameters.put(paramName, new String[]{null});
}
}
return super.resolveArgument(method, argumentType, annotations, mediaType, pathVariables, request, binderFactory, mavContainer);
}
@Override
public Object resolveRequiredArgument(Method method, TypeDescriptor typeDescriptor,
Annotation[] parameterAnnotations, MediaType mediaType) {
return null;
}
}
```
然后在 Spring Boot 应用的配置里注册这个拦截器:
```yaml
spring:
MVC:
handlerMethodArgumentResolvers:
- ref: myNullStringToNullResolver
```
这里假设你将拦截器实例化为 `myNullStringToNullResolver`。
阅读全文