#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, но таким образом, как мы могли бы добавить заголовки?