Java:获取HttpServletRequest请求参数

目录


一、概况

在实际的开发应用当中,我们有时需要开放一个公共的接口让第三方给我们推送数据,但是很多第三方厂家买的是别人的软件或者交接人员不是开发人员,没有程序源码,不知道推送的是什么格式的数据。

这就需要我们自己使用代码解析出来,在这里可以借用HttpServletRequest来解析字符串、JSON、XML以及文件数据等。

二、程序源码

java 复制代码
@PostMapping("/push")
public AjaxResult push(HttpServletRequest request) {
    try {
        String contentType = request.getContentType();
        log.info(String.format("摄像头报警请求参数类型:%s", contentType));
        if (contentType.contains("multipart/form-data;")) {
            readFile(request);
        } else {
            readParams(request);
        }
        return success();
    } catch (Exception e) {
        return success();
    }
}

读取文件参数

java 复制代码
public void readFile(HttpServletRequest request) {
    log.info(String.format("摄像头报警请求参数:%s", "文件"));
    // 由于HttpServletRequest不能直接取出文件数据,所以将其强制转换为MultipartHttpServletRequest
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
    log.info(String.format("摄像头报警请求参数:%s", String.valueOf(fileMap)));
    fileMap.forEach((key, value) -> {
        try {
            log.info(String.format("key:%s, value:%s", key, value.getName()));
            String filePath = RuoYiConfig.getUploadPath();  // 上传文件路径
            String fileName = FileUploadUtils.upload(filePath, value);
            log.info(String.format("文件已经下载:%s", fileName));
        } catch (IOException e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }

    });
}

读取非文件参数

java 复制代码
public void readParams(HttpServletRequest request) {
     StringBuilder data = new StringBuilder();
     String line;
     BufferedReader reader;
     try {
         reader = request.getReader();
         while (null != (line = reader.readLine())) {
             data.append(line);
         }
     } catch (IOException e) {
         log.error(e.getMessage());
     }
     log.info(String.format("摄像头报警请求参数:%s", data));
 }
相关推荐
budingxiaomoli8 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫8 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁8 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
学习中.........8 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java
计算机安禾9 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
weixin1997010801610 小时前
【保姆级教程】淘宝/天猫商品详情 API(item_get)接入指南:Python/Java/PHP 调用示例与 JSON 返回值解析
java·python·php
环流_10 小时前
redis核心数据类型在java中的操作
java·数据库·redis
雨辰AI10 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
带刺的坐椅10 小时前
Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
java·spring·ai·solon·flow
知彼解己10 小时前
Arthas:Java生产环境问题排查利器,从入门到实战
java