#spring-boot
#весенняя загрузка
Вопрос:
Я пытаюсь вызвать API, используя метод POST. В нем нет тела, и все параметры указаны только в URL.
Вот как я создаю запрос на вызов через версию OkHttpClient :
Request requestToken = new Request.Builder()
.url(TOKEN_GEN_API_URL ConfigConstants.TOKEN_CLIENT_ID_PARAM
TOKEN_CLIENT_ID_PARAM_VALUE ConfigConstants.TOKEN_CLINET_SECRET_PARAM
TOKEN_CLIENT_SECRET_PARAM_VALUE ConfigConstants.TOKEN_GRANT_TYPE_PARAM
TOKEN_GRANT_TYPE_PARAM_VALUE)
.post(requestBody)
.addHeader("Content-Type", "application/json")
.addHeader("cache-control", "no-cache")
.build();
Класс ConfigConstants :
public class ConfigConstants {
public static final String TOKEN_CLIENT_ID_PARAM = "?client_id=";
public static final String TOKEN_CLINET_SECRET_PARAM = "amp;client_secret=";
public static final String TOKEN_GRANT_TYPE_PARAM = "amp;grant_type=";
}
Это создало бы URL-адрес примерно так :
<endpoint>?client_id=...amp;client_secret=..amp;grant_type=..
Теперь, я пытаюсь вызвать это через RestTemplate, я думаю, что это было бы менее сложно в этом. Но я не уверен, как создать этот запрос без какого-либо тела.
@RestController
public class TokenRestAPI {
@Autowired
RestTemplate restTemplate;
private static final Logger logger = LogManager.getLogger(TokenRestAPI.class);
@Value("${TOKEN_CLIENT_SEC_PARAM_VALUE}")
private String TOKEN_CLIENT_SECRET_PARAM_VALUE;
@Value("${TOKEN_CLIENT_ID_PARAM_VALUE}")
private String TOKEN_CLIENT_ID_PARAM_VALUE;
@Value("${TOKEN_GRANT_TYPE_PARAM_VALUE}")
private String TOKEN_GRANT_TYPE_PARAM_VALUE;
@Value("${TOKEN_GEN_API_URL}")
private String TOKEN_GEN_API_URL;
@PostMapping("/")
public void getAuthToken() {
ResponseEntity<TokenPOJO> response = restTemplate.postForEntity(TOKEN_GEN_API_URL, request, TokenPOJO.class);
}
}
Ответ №1:
Если вы не хотите отправлять тело, просто передайте null в качестве объекта запроса:
ResponseEntity<TokenPOJO> response = restTemplate.postForEntity(TOKEN_GEN_API_URL, null, TokenPOJO.class);
вам все равно придется либо создать URL-адрес, либо использовать параметры. Последнее, что вы можете сделать, поместив переменные в строку вашего URL, например:
String url = "http://example.com?foo={bar}"
и передайте карту с именем переменной в качестве ключа и значением параметра в качестве значения.