【问题标题】:Post request with only query parameters using RestTemplate POST method使用 RestTemplate POST 方法仅使用查询参数发布请求
【发布时间】:2020-08-25 17:56:22
【问题描述】:

我正在尝试使用 POST 方法调用 API。其中没有正文,所有参数都在 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 = "&client_secret=";
    public static final String TOKEN_GRANT_TYPE_PARAM = "&grant_type=";
}

这将创建类似这样的 URL:

<endpoint>?client_id=...&client_secret=..&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);
        
    }
    

}

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    如果你不想发送正文,只需将 null 作为请求对象传递:

    ResponseEntity<TokenPOJO> response = restTemplate.postForEntity(TOKEN_GEN_API_URL, null, TokenPOJO.class);
    

    您仍然需要构建 URL 或使用参数。最后,您可以通过将变量放入 url 字符串中来完成,例如:

    String url = "http://example.com?foo={bar}"
    

    并传递一个以变量名作为键、参数值作为值的映射。

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 1970-01-01
      • 2016-07-10
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2016-05-29
      • 2020-07-31
      • 2011-05-06
      相关资源
      最近更新 更多