RestTemplate -> postForObject (Spring Boot) 的错误请求

问题描述

我在一件简单的事情上遇到了一些麻烦。

我正在尝试向其他 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);