首页 > 解决方案 > 如何从 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;
        }
    }
}

标签: jsonspring-boot

解决方案


解决:

添加到 pom.xml:

<dependencies>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>
</dependencies>
  1. 使用 Jackson API ObjectMapper 类将 Java 对象转换为 JSON 字符串
  2. 使用 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();
        }

感谢您的帮助 =)


推荐阅读