小编典典

如何在 Spring RestTemplate 请求上设置“Accept:”标头?

all

我想Accept:在我使用 Spring 的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


阅读 130

收藏
2022-05-29

共1个答案

小编典典

我建议使用其中一种exchange接受
的方法,HttpEntity您也可以为其设置HttpHeaders. (您还可以指定要使用的 HTTP 方法。)

例如,

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.

HttpEntity<String> entity = new HttpEntity<>("body", headers);
restTemplate.postForObject(url, entity, String.class);

RestTemplate#postForObjectJavadoc中提到了这一点。

request参数可以是 aHttpEntity以便向 请求添加额外的 HTTP 标头

2022-05-29