spring-boot - 使用 RestTemplate POST 方法仅使用查询参数发布请求
问题描述
我正在尝试使用 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();
配置常量类:
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);
}
}
解决方案
如果您不想发送正文,只需将 null 作为请求对象传递:
ResponseEntity<TokenPOJO> response = restTemplate.postForEntity(TOKEN_GEN_API_URL, null, TokenPOJO.class);
您仍然必须构建 URL 或使用参数。最后,您可以通过将变量放入 url 字符串中来完成,例如:
String url = "http://example.com?foo={bar}"
并传递一个以变量名作为键、参数值作为值的映射。
推荐阅读
- python - 在 numpy 点数组中搜索(双重条件)
- react-native - 添加项目时的竞争条件
- javascript - 一个正则表达式,在单引号或双引号之外用分号分隔
- gwt - 即使在官方教程上也出现 GWT 错误:检查您的模块是否直接或间接继承了“com.google.gwt.core.Core”
- arrays - 传递逗号分隔的键值字典元素并在python中形成一个数组
- php - 从 php 中的嵌套数组中删除一个键
- php - PHP 关联数组 - 将逗号分隔值拆分为单独的数组行
- react-native - [Unhandled promise rejection: Error: Not authorized to use background location services.]
- python - 使用 python 从 GitHub 将口袋妖怪保存到 CSV
- android-emulator - Android studio - apk file