1. ホーム
  2. スプリング

[解決済み】Spring RestTemplateリクエストに "Accept: "ヘッダーを設定する方法は?

2022-04-04 17:19:33

質問

の値を設定したい。 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文字列を取得することで動作します。

質問です。 Accept: ヘッダ(例. application/json , application/xml , ... ) とリクエストメソッド (例. GET , POST , ... ) を使用するとき、RestTemplateを使用しますか?

解決方法は?

のいずれかを使用することをお勧めします。 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);

私はこの方法が好きだ。なぜなら、この方法は強く型付けされているからだ。 exchangeHttpEntity .

しかし、その HttpEntityrequest 引数で postForObject .

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

に記載されています。 RestTemplate#postForObject ジャバドック .

request パラメータは HttpEntity にするため を追加する HTTPヘッダをリクエストに追加する .