Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring RestTemplate POST请求存在问题_Java_Spring_Rest - Fatal编程技术网

Java spring RestTemplate POST请求存在问题

Java spring RestTemplate POST请求存在问题,java,spring,rest,Java,Spring,Rest,试图在我们的一台服务器上进行post呼叫,但始终收到400个错误请求 static void postUserToken() { final String url = "SERVER ADDRESS"; RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setAccept(A

试图在我们的一台服务器上进行post呼叫,但始终收到400个错误请求

   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);
    }

作为响应,我得到了这样一个对象{“token”:“longtoken”}

问题可能在

headers.setContentType(MediaType.APPLICATION_JSON);
尝试使用
headers.setContentType(MediaType.APPLICATION\u FORM\u URLENCODED)
或将数据转换为正确的JSON


更多信息:(4.4.提交表单数据)

据我所知,由于我不知道您的rest呼叫详细信息,我在下面提供了您可以尝试的方法

拆下以下行

requestBody.add("auth", "secEnterprise");
添加行

headers.setHeader("auth", "secEnterprise");
如果您使用的是其他版本的ApacheHTTP客户端,则可以使用以下代码段

HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("header-name" , "header-value");

您使用的是一个
多值映射
,但是您从postman发送的json看起来像一个简单的
映射


这将生成
{“key1”:[“val1”]}
而不是
{“key1”:“val1”}

请附加成功的邮递员请求和响应。您可以调试restemplate.postForEntity,以查看在传递用户名和密码身份验证令牌时生成的确切请求,我认为不需要用户名和密码。您只需传递身份验证令牌。您可以检查此请求的招摇过市详细信息(如果有的话)。在邮递员呼叫中,您自己生成正确的json,而在代码中发送不同的数据。创建一个实体,然后使用ObjectMapperBy实体将其转换为json字符串,我指的是设置了所有三个参数的DTO(这将替代MultyValueMap)。然后,您只需将此对象馈送到json转换器,并获取一个有效的json字符串,然后将该字符串作为正文附加到请求。否此媒体类型已返回我415-不支持的媒体类型tested@VladimirZaguzinThat'这是因为服务器上的端点在发送'&'分隔值时需要正确的JSON数据。谢谢,我从网上所有的样品中得到了MultyValueMap;我质疑[]围绕价值观;现在,当我把它改成一张地图时,一切都正常了,我从服务器上得到了响应
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("header-name" , "header-value");