使用spring restTemplate对POST REST API进行身份验证

使用spring restTemplate对POST REST API进行身份验证,spring,rest,spring-mvc,spring-boot,restful-architecture,Spring,Rest,Spring Mvc,Spring Boot,Restful Architecture,我想使用SpringRestTemplate将一个对象发布到web服务器并取回一个 下面是一段代码: String authStringEncoded = Base64.getEncoder().encodeToString ("582f3e4a9e933168ea1048e6:98c6f2736c5f02279d767ce7ddfe7e5d".getBytes("utf-8")); HttpHeade

我想使用SpringRestTemplate将一个对象发布到web服务器并取回一个

下面是一段代码:

String authStringEncoded = 
                Base64.getEncoder().encodeToString
                    ("582f3e4a9e933168ea1048e6:98c6f2736c5f02279d767ce7ddfe7e5d".getBytes("utf-8"));


        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic " + authStringEncoded);


        HttpEntity<String> request = new HttpEntity<String>(headers);

        RestTemplate rt = new RestTemplate();
        rt.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        rt.getMessageConverters().add(new StringHttpMessageConverter());
        String uri = new String(REGISTERING_NEW_DEVICES.replace("{devicetype-id}", KIT_TYPE_ID));


        TdkDevice deviceC3DF86B = new TdkDevice();
        deviceC3DF86B.setId("C3DF86B");
        deviceC3DF86B.setPal("44CFFFC9D5F8E8B2F36");

        DeviceRegistration deviceRegistration = new  DeviceRegistration();
        deviceRegistration.getIds().add(deviceC3DF86B);

        rt.postForObject(uri, HttpMethod.POST, request, deviceRegistration, DeviceRegistration.class);
String authStringEncoded=
Base64.getEncoder().encodeToString
(“582f3e4a9e933168ea1048e6:98c6f2736c5f02279d767ce7ddfe7e5d”.getBytes(“utf-8”);
HttpHeaders=新的HttpHeaders();
添加(“授权”、“基本”+authStringEncoded);
HttpEntity请求=新的HttpEntity(标头);
RestTemplate rt=新的RestTemplate();
rt.getMessageConverters().add(新映射Jackson2HttpMessageConverter());
rt.getMessageConverters().add(新的StringHttpMessageConverter());
字符串uri=新字符串(注册新设备。替换(“{devicetype id}”,KIT\u TYPE\u id));
TdkDevice deviceC3DF86B=新TdkDevice();
deviceC3DF86B.setId(“C3DF86B”);
deviceC3DF86B.setPal(“44CFFFC9D5F8E8B2F36”);
DeviceRegistration DeviceRegistration=新的DeviceRegistration();
deviceRegistration.getIds().add(deviceC3DF86B);
rt.postForObject(uri,HttpMethod.POST,request,deviceRegistration,deviceRegistration.class);
但我有一个编译错误:

The method postForObject(String, Object, Class<T>, Object...) in the type RestTemplate is not applicable for the arguments (String, HttpMethod, HttpEntity<String>, DeviceRegistration, 
 Class<DeviceRegistration>)
类型RestTemplate中的方法postForObject(String、Object、Class、Object…)不适用于参数(String、HttpMethod、HttpEntity、DeviceRegistration、,
(班级)

您的服务呼叫应如下所示:

rt.postForObject(uri, request, DeviceRegistration.class);
根据spring RestTemplate api,postForObject方法的参数应该如下:

rt.postForObject(uri, request, DeviceRegistration.class);
参数:

  • url-url
  • 请求-要发布的对象(可能为空)
  • responseType—返回值的类型
  • uriVariables—用于展开模板的变量