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

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

  • 需求描述
  • 解决方案
  • 方案对比
  • 方案实现
    • 方案一实现
    • 方案二实现
    • 方案三实现

需求描述

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

解决方案

  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 对请求参数的优雅处方式(重写序列化方法)

你可能感兴趣的:(前端)