我有一个RESTful API,我正尝试通过Android和RestTemplate与之连接。通过设置HttpEntity的标头,然后使用RestTemplate的exchange()
方法,对HTTP的所有请求均通过HTTP身份验证进行身份验证。
所有GET请求都可以通过这种方式很好地工作,但是我无法弄清楚如何完成经过身份验证的POST请求。postForObject
和postForEntity
处理POST,但没有简单的方法来设置Authentication标头。
因此,对于GET来说,效果很好:
HttpAuthentication httpAuthentication = new HttpBasicAuthentication("username", "password");
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setAuthorization(httpAuthentication);
HttpEntity<?> httpEntity = new HttpEntity<Object>(requestHeaders);
MyModel[] models = restTemplate.exchange("/api/url", HttpMethod.GET, httpEntity, MyModel[].class);
但是POST显然不起作用,exchange()
因为它从不发送自定义标头,并且我看不到如何使用来设置请求正文exchange()
。
从RestTemplate发出经过身份验证的POST请求的最简单方法是什么?
确定找到了答案。exchange()
是最好的方法。奇怪的是,HttpEntity
该类没有setBody()
方法(它具有getBody()
),但是仍然可以通过构造函数设置请求主体。
// Create the request body as a MultiValueMap
MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();
body.add("field", "value");
// Note the body object as first parameter!
HttpEntity<?> httpEntity = new HttpEntity<Object>(body, requestHeaders);
MyModel model = restTemplate.exchange("/api/url", HttpMethod.POST, httpEntity, MyModel.class);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句