json - 如何从 ResponseEntity 获取 json 文件?
问题描述
我的网络服务正在使用另一个网络服务。在我的网络服务中,我修改了 json 的一些字段。然后在邮递员中就可以了。现在我需要将 ResponseEntity 转换为 .json 文件以将其保存到我计算机上的文件夹中,但尝试失败了。
有任何想法吗?
我的控制器电流:
@Controller
public class SiviccController {
private final Logger log = LoggerFactory.getLogger(SiviccController.class);
private String url = "http://localhost:9090/url_1";
@GetMapping("/url_2")
@ResponseBody
public Body sivicc() {
RestTemplate restTemplate = new RestTemplate(Factory.timeoutHttp());
try {
return restTemplate.getForObject(url, Body.class);
} catch (Exception e) {
Body body = new Body();
body.setIserror(true);
log.info(e.getMessage());
return body;
}
}
}
Matheus Cirillo 与以下代码完美配合:
@Controller
public class SiviccController {
private final Logger log = LoggerFactory.getLogger(SiviccController.class);
private String url = "http://localhost:9090/url_1";
@GetMapping("/url_2")
@ResponseBody
public Body sivicc() {
RestTemplate restTemplate = new RestTemplate(Factory.timeoutHttp());
try {
String response = restTemplate.getForObject(url, String.class);
BufferedWriter writer = new BufferedWriter(new FileWriter("my-file.json", true));
writer.append(response);
writer.close();
return restTemplate.getForObject(url, Body.class);
} catch (Exception e) {
Body body = new Body();
body.setIserror(true);
log.info(e.getMessage());
return body;
}
}
}
但是,您之前使用的 Web 服务现在会生成一个令牌。这就是为什么我将 getForObject 更改为 exchange 并且我很好地使用它,但是我应用相同的逻辑将 json 保存在我计算机上的一个文件夹中,但它会在两行中产生故障:
@Controller
public class SiviccController {
private final Logger log = LoggerFactory.getLogger(SiviccController.class);
private String url = "http://localhost:9090/url_1";
@GetMapping("/url_2")
@ResponseBody
public Body sivicc() {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.set("Authorization", "bearer 8P7oM_ZDhB3TYolVkB1MLtM734DrrUSMVEFuiy3u");
HttpEntity request = new HttpEntity(headers);
headers.add("User-Agent", "Spring's RestTemplate" );
ResponseEntity<String> response = restTemplate.exchange(
url,
HttpMethod.GET,
request,
//Body.class,
String.class,
1
);
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("my-file.json", true));
writer.append(response);//Error: The method append(CharSequence) in the type Writer is not applicable for the arguments (ResponseEntity<String>)
writer.close();
return response.getBody();//Error: Type mismatch: cannot convert from String to Body
} catch (Exception e) {
Body body = new Body();
body.setIserror(true);
log.info(e.getMessage());
return body;
}
}
}
解决方案
解决:
添加到 pom.xml:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
- 使用 Jackson API ObjectMapper 类将 Java 对象转换为 JSON 字符串
- 使用 BufferedWriter 写入文件。@Matheus Cirillo
ObjectMapper mapper = new ObjectMapper();
try {
json = mapper.writeValueAsString(response.getBody());
System.out.println("ResultingJSONstring = " + json);
BufferedWriter writer = new BufferedWriter(new FileWriter("my-file.json", true));
writer.append(json);
writer.close();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
感谢您的帮助 =)
推荐阅读
- algorithm - 找到不同的子集?
- c# - 我可以将 Pomelo.EntityFrameworkCore.MySql 与 .NET Framework 4.x 一起使用吗?
- c# - 如何在单元测试项目中获取启动项目的路径?
- javascript - 在angularjs切换操作中单击按钮时选择和取消选择div
- yii - 在动作 Yii 1.1 之前将参数传递给调用的动作
- javascript - WebRTC 视频不出现
- django - 为 django api 设置消费者驱动的合同测试并响应客户端的合适方法是什么?
- javascript - disable_with 使用渲染 js 时无法按预期工作:控制器中的“window.location=some_path”
- css - 如何将SVG中的foreignObject元素带到顶层?
- active-directory - 我可以使用脚本将命令从客户端发送到活动目录吗?