首页 > 解决方案 > 来自 RestTemplate 的 API 的响应需要传递给请求正文中的另一个。但它因 400 错误而失败

问题描述

我正在尝试使用 RestTemplate 将一个可能包含 \n 或引号(“)的 API 的响应传递给另一个 API。

但它总是因 400 错误而失败。我猜帖子正文由于换行符和引号而损坏。

你能建议如何使它工作吗?

这是我得到的例外,我的请求正文如下所示:

{"to":"test@test.com","re​​plyTo":"test@test.com","body":"call\n"}

Request URL: http://localhost:8080/endpoint/test, action: POST, status: 400
org.springframework.web.client.HttpClientErrorException: 400 null
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94)
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:79)
    at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:775)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:728)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:702)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.j

标签: javaspring-bootresttemplate

解决方案


您需要创建一个这样的模型:

class MyModel {
  String to;
  String replyTo;
  String body;
  //getters and setters......
}

像这样将字符串编组到对象中:


String requestBody="";//{"to":"test@test.com","replyTo":"test@test.com","body":"call\n"}
MyModel myModel=new ObjectMapper().readValue(requestBody, MyModel);

现在您有了一个对象,从 body 属性中删除换行符。像这样:

String s=myModel.getBody().replace('\n', ' ');//you can choose to replace "\n" with whatever you want
myModel.setBody(s);

之后,您可以像这样反序列化对象:

requestBody=new ObjectMapper().writeValueAsString(myModel);

发送requestBody


推荐阅读