首页 > 解决方案 > spring RestTemplate POST 请求的问题

问题描述

试图在我们的一台服务器上进行 post call,但一直收到 400 BAD_REQUEST

   static void postUserToken()
    {
        final String url = "SERVER ADDRESS";
        RestTemplate restTemplate = new RestTemplate();

        HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        headers.setContentType(MediaType.APPLICATION_JSON);

        MultiValueMap<String, String> requestBody= new LinkedMultiValueMap<>();
        requestBody.add("userName", "TESTUSER");
        requestBody.add("password", "TESTPASSWORD");
        requestBody.add("auth", "secEnterprise");

        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(requestBody, headers);

        ResponseEntity<String> response =  restTemplate.postForEntity(url, request, String.class );

        System.out.println(response);
    }

获取相同地址的请求有效,通过 Postman 发布请求适用于相同的正文和标题

我错过了什么?

编辑

邮递员的电话

POST /api/call/ HTTP/1.1
Host: SEREVERADDRESS:6405
Content-Type: application/json
Accept: application/json
User-Agent: PostmanRuntime/7.15.0
Cache-Control: no-cache
Postman-Token: token1,token2
Host: SEREVERADDRESS:6405
accept-encoding: gzip, deflate
content-length: 92
Connection: keep-alive
cache-control: no-cache

{
    "password": "PASSWORD",
    "auth": "secEnterprise",
    "userName": "USER"
}

作为回应,我得到一个像这样的对象 {"token":"longtoken"}

标签: javaspringrest

解决方案


您正在使用一个MultiValueMap但是您从邮递员发送的 json 看起来像一个简单的Map.

这将产生{"key1":["val1"]}而不是{"key1":"val1"}


推荐阅读