文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

优化Spring Boot中HttpServletRequest参数处理的实用工具类

2024-11-30 04:55

关注

1. 背景

在实际项目中,我们经常会遇到对请求参数进行特殊处理的需求,例如去除空字符串参数、处理JSON格式的POST请求等。为了更灵活地处理这些情况,我们创建了ParameterRequestWrapper类,它继承自HttpServletRequestWrapper,并在构造方法中对请求参数进行了初始化和定制化处理。

2. 功能介绍

2.1 参数去空格处理

在处理页面提交的参数时,有时会出现空字符串参数,如果不进行处理,这些空字符串可能会对SQL查询等操作产生不良影响。为了解决这个问题,我们在modifyParameterValues方法中去除了页面提交的空字符串参数,确保参数的有效性。

public void modifyParameterValues() {
    // 去除页面提交出现的空字符串参数,防止SQL查询默认带进去,当作参数,造成页面列表不展示
    params.entrySet().removeIf(e -> "".equals(e.getValue()[0]));
    Set set = params.keySet();
    for (String key : set) {
        String[] values = params.get(key);
        values[0] = values[0].trim();
        params.put(key, values);
    }
}

2.2 JSON格式的POST请求处理

对于POST请求,特别是JSON格式的POST请求,我们通过重写getInputStream方法,将请求中的JSON参数进行处理,去除两端空格,并输出日志,方便调试。

@Override
public ServletInputStream getInputStream() throws IOException {
    // 非json类型,直接返回
    if (!super.getHeader(HttpHeaders.CONTENT_TYPE).equalsIgnoreCase(MediaType.APPLICATION_JSON_VALUE)) {
        return super.getInputStream();
    }
    // 为空,直接返回
    String json = IOUtils.toString(super.getInputStream(), StandardCharsets.UTF_8);
    if (StringUtils.isEmpty(json)) {
        return super.getInputStream();
    }
    log.info("去除POST请求数据两端的空格前参数:" + json);
    Map map = StringJsonUtils.jsonStringToMap(json);
    log.info("去除POST请求数据两端的空格后参数:" + JSON.toJSONString(map));
    ByteArrayInputStream bis = new ByteArrayInputStream(JSON.toJSONString(map).getBytes(StandardCharsets.UTF_8));
    return new MyServletInputStream(bis);
}

使用示例

要使用ParameterRequestWrapper,只需在Controller中将HttpServletRequest替换为该类的实例即可,如下所示:

@PostMapping("/example

public ResponseEntity example(ParameterRequestWrapper request) {
    // 处理定制化的HttpServletRequest,可以直接使用request.getParameter等方法
    // ...
    return ResponseEntity.ok("Success");
}

通过这样的替换,我们就可以在请求到达Controller之前对参数进行定制化处理,更好地适应项目的需求。

4. 总结

ParameterRequestWrapper是一个简单而实用的工具类,通过对HttpServletRequest的定制化处理,能够满足一些特殊场景下的需求。在实际项目中,根据具体情况,我们可以进一步扩展该类,以满足更复杂的参数处理需求。希望这个工具类能够帮助到开发者更方便地处理请求参数,提升项目的可维护性和灵活性。

来源:柳岸花开内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯