Ответ от API из RestTemplate должен быть передан другому в теле запроса. Но он терпит неудачу с ошибкой 400

#java #spring-boot #resttemplate

#java #весенняя загрузка #resttemplate

Вопрос:

Я пытаюсь передать ответ одного API, который может содержать n или кавычки («), в другой API, используя RestTemplate.

Но он всегда терпит неудачу с ошибкой 400. Я предполагаю, что текст сообщения поврежден из-за новой строки и кавычек в нем.

Не могли бы вы подсказать, как заставить его работать?

Это исключение, которое я получаю, и тело моего запроса выглядит так:

{«to»:»test@test.com «,»Ответить»:»test@test.com «,»тело»: «вызов 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
 

Комментарии:

1. Можете ли вы получить некоторый фрагмент кода?

2. Лучший способ определить фактическую причину проблемы — зарегистрировать ответ, который вы получаете от первого API, а затем использовать insomnia, curl, postman или любой другой клиент rest для отправки его во второй API. Таким образом, вы можете манипулировать им, пока не выясните, что вызывает проблему. Только после определения источника проблемы вы сможете правильно ее исправить

3. Мы регистрируем ответ. И, похоже, он содержит n, но возможно, что он может содержать другие escape-последовательности и кавычки, а также мы отправляем пользовательский чат в теле запроса.

4. @WBLord На какую часть кода вы на самом деле ссылаетесь? Это простой вызов API шаблона rest.

5. Позвольте мне дать вам вызов…… Поделитесь телом запроса, которое дает вам 200, а также поделитесь телом, которое дает вам 500, я могу помочь вам сравнить их. Я сильно подозреваю, что вы фокусируетесь на «неправильной проблеме»

Ответ №1:

Вам нужно создать такую модель:

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

маршалируйте строку в объект следующим образом:

 
String requestBody="";//{"to":"test@test.com","replyTo":"test@test.com","body":"calln"}
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