如果去掉前端请求参数中的前后空格?

需求描述

在我们日常项目开发过程中,往往会遇到前端请求参数中有空格的情况,造成数据跟查询结果有出入的情况。那么,怎么快速的去除前端传参中字符串类型参数的前后空格呢?

解决方案

  1. 梳理项目中所有涉及到的相关接口跟接收参数方式,挨个写方法去除。
  2. 通过过滤器/拦截器,在请求之前,通过过滤器/拦截器,将请求做前置处理,获取请求中url 或者 body 中的参数值,将参数中字符类型参数的前后空格处理后,再使请求去调用具体的方法;
  3. 通过序列化的方式,后端接收前端的参数时,往往通过 @RequestParam 或 @RequestBody 注解进行实现,会通过序列化的方式将前端传递过来的参数处理成实体类,我们只要找到序列化参数的地方,重写序列化的方法即可。

方案对比

方案名描述
方案一实现简单,通过反射写个工具类将实体类中字符类型的变量统一去前后空格即可。
使用单个处理方式,当系统设计相关点过多时,需要每个方法中都需要处理,代码臃肿,不美观。笨重,不推荐
方案二过滤器方式编码复杂,实现难度较高,需要考虑点众多,不推荐
方案三通过重写序列化方法的方式实现,代码简单,优雅。推荐

方案实现

方案一实现

编写工具类对实体类中相关字符类型进行前后空格处理

/**
 * 去除 Bean 中字符串类型字段的前后空格
 * @param entity 实体类
 * @throws IllegalAccessException 抛出异常
 */
public static void trimEntityFields(Object entity) throws IllegalAccessException {
    // 使用功能反射获取实体类中的所有字段
    Field[] fields = entity.getClass().getDeclaredFields();
    for (Field field : fields) {
        // 设置字段可访问,以便读取和设置字段的值
        field.setAccessible(true);
        // 判断字段是否为 String 类型
        if (field.getType() == String.class) {
            // 获取字段的值
            String value = (String) field.get(entity);
            if (StrUtil.isNotBlank(value)) {
                // 使用反射设置新的字段值
                field.set(entity, value.trim());
            }
        }
    }
}

方案二实现

编写过滤器,对请求参数进行前置处理;
实现方式参考链接:Java 通过 filter 过滤器对请求参数进行处理并修改

方案三实现

通过重写参数序列化方法实现
实现方式参考链接:Spring 对请求参数的优雅处方式(重写序列化方法)

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以通过自定义一个过滤器实现对所有请求参数清除前后空格的操作。以下是实现方式: 1. 创建一个类,继承 `OncePerRequestFilter` 类,重写 `doFilterInternal` 方法,该方法用于拦截请求并处理请求参数。 ```java import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class TrimRequestParamsFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // 获取所有请求参数名 Enumeration<String> paramNames = request.getParameterNames(); // 遍历请求参数并清除前后空格 while (paramNames.hasMoreElements()) { String paramName = paramNames.nextElement(); String[] paramValues = request.getParameterValues(paramName); for (int i = 0; i < paramValues.length; i++) { paramValues[i] = paramValues[i].trim(); } request.setAttribute(paramName, paramValues); } filterChain.doFilter(request, response); } } ``` 2. 在Spring Boot项目注册该过滤器。 ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<TrimRequestParamsFilter> trimRequestParamsFilter() { FilterRegistrationBean<TrimRequestParamsFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new TrimRequestParamsFilter()); // 设置过滤器的执行顺序,数字越小越先执行 registrationBean.setOrder(1); // 设置需要过滤的请求路径 registrationBean.addUrlPatterns("/*"); return registrationBean; } } ``` 该配置文件创建了一个名为 `trimRequestParamsFilter` 的过滤器,并设置需要过滤的请求路径为 "/*",表示对所有请求进行参数清除操作。最后通过 `setOrder` 方法设置过滤器的执行顺序,数字越小越先执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是王小贱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值