我想Accept:在我使用 Spring 的RestTemplate.
Accept:
RestTemplate
这是我的 Spring 请求处理代码
@RequestMapping( value= "/uom_matrix_save_or_edit", method = RequestMethod.POST, produces="application/json" ) public @ResponseBody ModelMap uomMatrixSaveOrEdit( ModelMap model, @RequestParam("parentId") String parentId ){ model.addAttribute("attributeValues",parentId); return model; }
这是我的 Java REST 客户端:
public void post(){ MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>(); params.add("parentId", "parentId"); String result = rest.postForObject( url, params, String.class) ; System.out.println(result); }
这对我有用;我从服务器端得到一个 JSON 字符串。
我的问题是:当我使用 RestTemplate 时,如何指定Accept:标头(例如application/json, application/xml, … )和请求方法(例如GET, , … )?POST
application/json
application/xml
GET
POST
我建议使用其中一种exchange接受 的方法,HttpEntity您也可以为其设置HttpHeaders. (您还可以指定要使用的 HTTP 方法。)
exchange
HttpEntity
HttpHeaders
例如,
RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); HttpEntity<String> entity = new HttpEntity<>("body", headers); restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
我更喜欢这个解决方案,因为它是强类型的,即。exchange期望一个HttpEntity.
但是,您也可以将其HttpEntity作为request参数传递给postForObject.
request
postForObject
HttpEntity<String> entity = new HttpEntity<>("body", headers); restTemplate.postForObject(url, entity, String.class);
RestTemplate#postForObjectJavadoc中提到了这一点。
RestTemplate#postForObject
该request参数可以是 aHttpEntity以便向 请求添加额外的 HTTP 标头 。