Охттп конвертировать Ответ в Spring ResponseEntity - PullRequest
0 голосов
/ 20 марта 2020

У меня есть веб-сервис Springboot 2.2 с API-интерфейсом POST REST. Я использую Okhttp клиент для отправки запроса в сторонний сервис. Я хочу вернуть точный ответ от стороннего сервиса вызывающей стороне моего веб-сервиса. Все рецепты okhttp ссылаются на:

 if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

      System.out.println(response.body().string());

Я попытался вернуть okhttp Response в моем API, но я только возвращаюсь к примеру вызывающего:

{
    "redirect": false,
    "successful": true
} 

Так что он не вставляет сообщение возвращено из сторонней службы.

Кто-нибудь знает, как преобразовать объект Okhttp Response в объект Spring ResponseEntity, чтобы я мог вернуть http код ответа и сообщение

1 Ответ

1 голос
/ 23 марта 2020

В этом случае вы можете использовать HttpServletResponse в Spring-Webservice напрямую и передать InputStream, заданный из okhttp ResponseBody, в OutputStream HttpServletResponse.

@PostMapping(path="/my/webservice")
public void postSomething(HttpServletResponse response)throws IOException{
   okhttp3.Response redirectedResponse = redirectCall();
   if(redirectedResponse.isSuccessful())
     pipe(response.getOutputStream(), redirectedResponse.body.byteStream());
}

private void pipe(OutputStream output, InputStream input)throws IOException{
   byte chunk[] = new byte[1024];
   while(input.read(chunk, 0, 1024) != -1){
     output.write(chunk);
   }
}
...