如何在Spring Boot REST服务中保存并展示JSON/Octet-Stream响应?
在Spring Boot REST服务中处理JSON/Octet-Stream响应:保存与展示
先给你提个小建议:你的代码里同时用了手动构建Basic认证头和BasicAuthorizationInterceptor,这其实有点冗余——BasicAuthorizationInterceptor已经帮你处理了认证逻辑,不需要再手动设置authHeader啦,删掉那部分代码会更简洁。
接下来分两种响应类型给你具体解决方案:
1. 处理JSON响应
如果服务器返回的是JSON,你可以选择直接用字符串接收,或者映射到实体类(更推荐,方便后续操作)。
展示JSON内容
- 如果你只是想打印展示,直接获取响应体即可:
RestTemplate restTemplate = new RestTemplate(); // 添加认证拦截器,不用手动构建header restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("username", "password")); String fooResourceUrl = "server URI"; HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); HttpEntity<String> entity = new HttpEntity<>(headers); // 这里你原来的"parameters"如果不需要可以去掉,或者换成实际请求体 // 用String接收JSON ResponseEntity<String> result = restTemplate.exchange(fooResourceUrl, HttpMethod.GET, entity, String.class); // 打印展示JSON System.out.println("JSON响应内容:" + result.getBody()); // 更推荐:映射到实体类 // 假设你有一个Foo类,和JSON结构对应 // ResponseEntity<Foo> result = restTemplate.exchange(fooResourceUrl, HttpMethod.GET, entity, Foo.class); // System.out.println("映射后的实体:" + result.getBody());
保存JSON到文件
把JSON字符串写入本地文件,可以用Java NIO的Files类:
String jsonContent = result.getBody(); Path filePath = Paths.get("保存的文件路径/response.json"); try { Files.write(filePath, jsonContent.getBytes(StandardCharsets.UTF_8)); System.out.println("JSON已成功保存到:" + filePath.toAbsolutePath()); } catch (IOException e) { e.printStackTrace(); }
2. 处理Octet-Stream(二进制)响应
如果服务器返回的是二进制数据(比如图片、PDF、压缩包等),不能用String接收,要换成byte[]或者Resource类型。
保存二进制文件到本地
RestTemplate restTemplate = new RestTemplate(); restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("username", "password")); String fooResourceUrl = "server URI"; HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM)); HttpEntity<String> entity = new HttpEntity<>(headers); // 用byte[]接收二进制响应 ResponseEntity<byte[]> result = restTemplate.exchange(fooResourceUrl, HttpMethod.GET, entity, byte[].class); // 保存到文件 Path filePath = Paths.get("保存的文件路径/response.bin"); // 根据实际文件类型改后缀,比如.png/.pdf try { Files.write(filePath, result.getBody()); System.out.println("二进制文件已成功保存到:" + filePath.toAbsolutePath()); } catch (IOException e) { e.printStackTrace(); }
展示二进制内容(以图片为例)
如果是图片这类可视化的二进制数据,你可以把它转成Base64字符串,方便在前端页面展示(如果是Web场景):
byte[] imageBytes = result.getBody(); String base64Image = Base64.getEncoder().encodeToString(imageBytes); // 前端可以用<img src="data:image/png;base64,${base64Image}" />来展示 System.out.println("图片Base64编码:" + base64Image);
如果是其他二进制类型(比如PDF),直接展示不太现实,一般都是保存后打开对应的文件查看。
内容的提问来源于stack exchange,提问作者Pralay Das
相关产品推荐
相关产品推荐

