Как отправить запрос GET с заголовками весной

#spring #rest #jakarta-ee

#spring #rest #джакарта-ee

Вопрос:

Он вызовет другой REST API с запросом GET.

 @RequestMapping(value = "xxxx/{id}", method = RequestMethod.GET)
public @ResponseBody GetObjet GET( @PathVariable("id") String id,
                @RequestHeader(value="X-Auth-Token") String Token) {

    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();        
    headers.add("X-Auth-Token", Token);

    HttpEntity entity = new HttpEntity(headers);
    ResponseEntity<GetObjet> response = restTemplate.exchange(url, HttpMethod.GET, entity, GetObjet.class);

    return response.getBody();
}
  

Всегда ошибка 400. Это означает, что неверный запрос или какие-то ошибки в теле запроса. Но это делается для того, чтобы тело повторного запроса всегда было пустым. Так что этот способ добавления заголовка может быть неправильным. Есть какие-нибудь идеи?

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

1. Что такое url ? Почему вы помещаете этот код в метод, который прослушивает GET запросы? Пытались ли вы использовать клиентскую часть своего кода как отдельный клиент, а не как часть сервера?

2. URL @LutzHorn — это адрес другого rest api. Ответить на ваш вопрос немного сложно. Мне нужен мой API для вызова другого API. Я знаю, что это нехорошо, но выбора нет из-за моей личной проблемы TOT

Ответ №1:

Вы можете получить заголовки, включая обозначения @RequestHeader , в вашем методе

 public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
                              @RequestHeader("Keep-Alive") long keepAlive)  {

}
  

o

Вы можете прочитать больше о запросе здесь

И другой способ получить URL-адрес:

  @RequestMapping(value = "/restURL")
     public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){
     //Use headers to get the information about all the request headers
     long contentLength = headers.getContentLength();
    ...
     StreamSource source = new StreamSource(new StringReader(body));
     YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source);
     ...
     }
  

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

1. Но теперь проблема в том, что resttemplate.exchange не работает, когда мы отправляем запрос GET с заголовками

Ответ №2:

Попробуйте использовать:

 RestTemplate.getForEntity(url, GetObject.class);
  

У вас есть несколько методов для запроса данных из rest API, таких как getForEntity и getForObject , используйте тот, который вам нужен.

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

1. Thy, но таким образом, как мы могли бы добавить заголовки?