java - 来自 RestTemplate 的 API 的响应需要传递给请求正文中的另一个。但它因 400 错误而失败
问题描述
我正在尝试使用 RestTemplate 将一个可能包含 \n 或引号(“)的 API 的响应传递给另一个 API。
但它总是因 400 错误而失败。我猜帖子正文由于换行符和引号而损坏。
你能建议如何使它工作吗?
这是我得到的例外,我的请求正文如下所示:
{"to":"test@test.com","replyTo":"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
解决方案
您需要创建一个这样的模型:
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
推荐阅读
- javascript - 在存在 HTML 的同一文件夹中创建新的 html 文件
- python - 按包含字符串值的字段排序对象
- drupal-8 - 如何将我的 BLT 项目更改添加到 GIT
- java - 如何在 Maven 中更新我的传递依赖?
- python - 在 jupyter notebook 中导入库时出现运行时警告
- asp.net - Framework7 与 Asp.Net
- android - Cordova ionic 1 Visual Studio 构建失败
- javascript - 从
使用 javascript 和 puppeteer - unity3d - 禁用 Unity 2D 对象的碰撞
- c++ - 在线程之间共享 udp 套接字