问题描述
我在一件简单的事情上遇到了一些麻烦。
我正在尝试向其他 REST 服务发送请求
//getting restTemplate from RestTemplateBuilder.build()
//endpoint and rest of variables came in properties
Map<String,String> map = new HashMap<>();
map.put("app",app);
map.put("username",username);
map.put("password",password);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
String token = restTemplate.postForObject(loginEndpoint,headers,String.class,map);
我收到:
Unexpected error occurred in scheduled task.
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
奇怪的是,当我使用一个简单的 CURL 调用并且工作流畅时。
已经检查了变量和端点,是正确的。
解决方法
在这种情况下,端点必须在端点 url 上具有适当的占位符。
我使这个方法变得简单:
private String placeHolders(Map<String,String> values){
String response = "?";
boolean first = true;
for(Map.Entry<String,String> entry:values.entrySet()){
if(first){
first = false;
}else{
response+="&";
}
response+=entry.getKey()+"="+entry.getValue();
}
return response;
}
现在的电话是:
String token = restTemplate.postForObject(loginEndpoint+placeHolders,headers,String.class,map);