如何通过REST API导入并使用Spring Boot解析JSON文件?
嘿,作为Spring Boot新手,我完全懂你想把之前处理CSV的逻辑迁移到JSON文件上的需求!咱们一步步来,把这个事儿搞定~
1. 接收上传的JSON文件(和CSV逻辑一致)
其实上传JSON文件的接收方式和你之前处理CSV几乎一样,因为本质都是接收客户端上传的文件流。你可以直接复用类似的控制器方法,只是后续的解析逻辑不同:
@RequestMapping(value = "/import-json", method = RequestMethod.POST) public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException { String fileName = multipartFile.getOriginalFilename(); System.out.println("Uploaded JSON file name: " + fileName); // 接下来咱们在这里加JSON解析逻辑 return "JSON file uploaded and processed successfully!"; }
2. 解析JSON内容(用Spring默认的Jackson库)
Spring Boot默认集成了Jackson作为JSON处理库,不用额外引入依赖。这里分两种常见场景来处理:
2.1 解析到自定义实体类(推荐结构化处理)
如果你的JSON有固定结构,比如是一组用户数据,先定义一个对应实体类(Jackson需要无参构造函数,记得加上):
public class User { private String id; private String name; private int age; // 必须的无参构造函数 public User() {} // Getter和Setter方法 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
然后在控制器里用ObjectMapper解析文件流到实体类集合:
@RequestMapping(value = "/import-json", method = RequestMethod.POST) public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException { String fileName = multipartFile.getOriginalFilename(); System.out.println("Uploaded JSON file name: " + fileName); // 初始化Jackson的ObjectMapper ObjectMapper objectMapper = new ObjectMapper(); // 解析JSON数组到List<User>,用TypeReference解决泛型类型擦除问题 List<User> userList = objectMapper.readValue( multipartFile.getInputStream(), new TypeReference<List<User>>() {} ); // 这里可以做你需要的业务处理,比如打印数据、存入数据库等 userList.forEach(user -> System.out.println("用户:" + user.getName() + ",年龄:" + user.getAge())); return "JSON file uploaded and processed successfully!"; }
2.2 解析到通用集合(适合不确定JSON结构的场景)
如果你的JSON结构不固定,或者只是想快速查看内容,可以解析成Map或List这种通用集合:
@RequestMapping(value = "/import-json", method = RequestMethod.POST) public String handleJsonFileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException { String fileName = multipartFile.getOriginalFilename(); System.out.println("Uploaded JSON file name: " + fileName); ObjectMapper objectMapper = new ObjectMapper(); // 解析成通用的List<Map<String, Object>>(针对JSON数组的情况) List<Map<String, Object>> jsonData = objectMapper.readValue( multipartFile.getInputStream(), new TypeReference<List<Map<String, Object>>>() {} ); // 遍历打印所有JSON内容 jsonData.forEach(item -> System.out.println("JSON条目:" + item)); return "JSON file uploaded and processed successfully!"; }
3. 额外的实用小技巧
- 文件格式校验:可以在方法开头先判断上传的是不是JSON文件,避免无效请求:
if (!multipartFile.getOriginalFilename().toLowerCase().endsWith(".json")) { return "请上传有效的JSON文件!"; }
- 大文件流式解析:如果JSON文件很大,不要一次性读进内存,用流式解析避免内存溢出:
try (InputStream inputStream = multipartFile.getInputStream()) { MappingIterator<User> iterator = objectMapper.readerFor(User.class).readValues(inputStream); while (iterator.hasNext()) { User user = iterator.next(); // 逐个处理用户数据 } }
内容的提问来源于stack exchange,提问作者user6618310
相关产品推荐
相关产品推荐

