javax.servlet.http.HttpServletResponse;API导入报错解决方案

javax.servlet.http.HttpServletResponse;API导入报错解决方案与Postman上传下载文件验证

1. 主要错误:缺少

Servlet API 依赖

错误信息显示 javax.servlet.http 包不存在。这是因为你的项目缺少 Servlet API 依赖。

解决方案:

如果你使用的是 Maven ,在 pom.xml 中添加:

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

如果你使用的是 Gradle ,在 build.gradle 中添加:

gradle 复制代码
implementation 'org.springframework.boot:spring-boot-starter-web'

2. 缺少的导入

在你的 CsvController.java 文件顶部添加缺少的导入:

java 复制代码
import java.util.Map;
import java.util.HashMap;

3. 完整的修复后的导入部分应该是:

java 复制代码
package com.example.usermanagement.controller;

import com.example.usermanagement.common.Result;
import com.example.usermanagement.entity.User;
import com.example.usermanagement.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

4. 如果你使用的是 Spring Boot 3.x

Spring Boot 3.x 使用 Jakarta EE 而不是 Java EE,所以需要将 javax 改为 jakarta

java 复制代码
// 将这行
import javax.servlet.http.HttpServletResponse;

// 改为
import jakarta.servlet.http.HttpServletResponse;

5. 验证步骤

  1. 添加依赖后,刷新/重新加载你的项目
  2. 如果使用 IntelliJ IDEA,点击 Maven/Gradle 工具窗口的刷新按钮
  3. 重新构建项目

1. 准备测试 CSV 文件

首先创建一个测试用的 CSV 文件(例如:test_users.csv),内容格式如下:

csv 复制代码
ID,用户名,密码,邮箱,手机号,状态,分数,创建时间,更新时间
1,testuser1,password123,test1@example.com,13800138001,1,85,2025-01-01 10:00:00,2025-01-01 10:00:00
2,testuser2,password456,test2@example.com,13800138002,1,90,2025-01-01 11:00:00,2025-01-01 11:00:00
3,newuser1,password789,new1@example.com,13800138003,1,75,2025-01-01 12:00:00,2025-01-01 12:00:00

2. Postman 设置步骤

步骤 1:创建新请求

  • 打开 Postman
  • 点击 "New" → "Request"
  • 设置请求方法为 POST
  • URL 设置为:http://localhost:8080/api/csv/import

步骤 2:设置请求体

  1. 选择 Body 标签
  2. 选择 form-data 选项
  3. 添加一个键值对:
    • Key:file(注意要与代码中的 @RequestParam("file") 保持一致)
    • 在 Key 右侧的下拉菜单中选择 File(而不是 Text)
    • Value:点击 "Select Files" 选择你准备好的 CSV 文件

步骤 3:发送请求

点击 "Send" 按钮发送请求

3. 预期响应

成功导入后,你应该收到类似这样的响应:

json 复制代码
{
    "code": 200,
    "message": "成功",
    "data": {
        "successCount": 3,
        "errorCount": 0,
        "errors": []
    }
}

4. 测试不同场景

测试场景 1:正常导入

使用上面的标准 CSV 文件

测试场景 2:更新现有用户

创建一个包含已存在用户名的 CSV:

csv 复制代码
ID,用户名,密码,邮箱,手机号,状态,分数,创建时间,更新时间
1,testuser1,newpassword,newemail@example.com,13900139001,1,95,2025-01-01 10:00:00,2025-01-01 10:00:00

测试场景 3:错误数据

测试包含错误数据的 CSV:

csv 复制代码
ID,用户名,密码,邮箱,手机号,状态,分数,创建时间,更新时间
1,testuser1,password123,test1@example.com,13800138001,1,abc,2025-01-01 10:00:00,2025-01-01 10:00:00
2,testuser2,password456,test2@example.com,13800138002

预期响应会包含错误信息:

json 复制代码
{
    "code": 200,
    "message": "成功",
    "data": {
        "successCount": 0,
        "errorCount": 2,
        "errors": [
            "第2行:For input string: \"abc\"",
            "第3行:字段不足"
        ]
    }
}

5. Postman 截图说明

在 Postman 中应该是这样的:

复制代码
POST  http://localhost:8080/api/csv/import

Body:
[x] form-data
    KEY         VALUE
    file        [Select Files] test_users.csv

6. 注意事项

  1. 确保文件编码是 UTF-8
  2. CSV 文件的第一行必须是表头(会被跳过)
  3. 用户名字段用于判断是更新还是新增
  4. 状态和分数字段必须是数字
  5. 日期格式必须匹配代码中的格式
相关推荐
曼巴UE51 小时前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
captain3761 小时前
HTTP(2)
java·网络·http·java-ee
开开心心就好1 小时前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
比兔代理11 小时前
正向代理与反向代理技术辨析,为什么代理 IP 属于正向代理
服务器·网络·http·ip
K成长日志1 天前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_1 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
碳基修炼2 天前
排查记:本地 devServer 是 http,浏览器却把 302 重定向升级成了 https
前端·http
那年窗外下的雪.2 天前
第 02 天:Linux 权限、inode、目录项与链接
学习·http
那年窗外下的雪.2 天前
AIDC 学习日志|第 27 天|EVPN 多归属收敛时间线与 Leaf2 接管验证
网络协议·学习·http·tcpdump
j7~2 天前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程