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));
 }
相关推荐
一个做软件开发的牛马几秒前
Spring Boot Web 开发实战:RESTful API 设计、统一异常处理、参数校验与拦截器
java·后端
yurenpai(27届找实习中)1 分钟前
Feed 流推送与附近商户:从推模式到 GeoHash,一条 Timeline 的完整旅程
java·数据库·oracle·feed
小bo波3 分钟前
Java反射机制——运行时"透视"类的秘密
java·jvm·反射·源码分析·动态代理·进阶·spring底层·框架原理
IT 行者4 分钟前
GitHub Spec Kit 实战(三):写一份能管住所有 spec 的 /speckit.constitution
java·github·ai编程·claude
java1234_小锋5 分钟前
Spring Boot 的核心注解 @SpringBootApplication 由哪三个注解组成?
java·spring boot·后端
::呵呵哒::5 分钟前
在macOS/Linux上优雅管理多个JDK版本:环境变量与别名配置指南
java·linux·macos
IT 行者7 分钟前
GitHub Spec Kit 实战(二):写一份不偏的 /speckit.specify
java·github·ai编程·claude
就改了10 分钟前
ElasticsearchRestTemplate使用方法详解!!!
java·elasticsearch·springboot
独隅16 分钟前
IntelliJ IDEA 在 Linux 上的完整安装与使用指南
java·linux·intellij-idea
SimonKing17 分钟前
别再自己写脚本了!DeepSeek三秒生成,豆包直接出片
java·后端·程序员