Запрос Post только с параметрами запроса с использованием метода POST RestTemplate

#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}"
  

и передайте карту с именем переменной в качестве ключа и значением параметра в качестве значения.