簡體   English   中英

POST x-www-form-urlencoded

[英]POST x-www-form-urlencoded

我一直在閱讀以下內容並嘗試使用 RestTemplate 通過 Spring Boot 發送 POST 請求。

HttpHeaders headers = new HttpHeaders();
headers.add("content-type", "application/x-www-form-urlencoded");

final String body = "clipmessage={ bridgeId: \"" + user.getBridgeId() + "\", clipCommand: { url: \"" + setLightState("3") + "\", method: \"PUT\", body: { \"on\": " + state.isOn() + " } } }";
final String url = API_ADDRESS + user.getAccessToken();

HttpEntity<String> entity = new HttpEntity<>(body, headers);

restTemplate.postForEntity(url, entity, String.class);

如果我記錄 URL 和正文並在 Postman 中發送完全相同的內容,它會成功。 但是,當我從我的 Spring 引導應用程序發送它時不是這樣。

我猜這個特殊的身體必須以某種我不知道的特殊方式發送?

有人對接下來要在這里嘗試什么有任何提示嗎?

更新 1:我按照建議嘗試了 MultiValueMap,但也沒有讓它工作。

MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();

final String body = "{ bridgeId: \"" + user.getBridgeId() + "\", clipCommand: { url: \"" + setLightState("3") + "\", method: \"PUT\", body: { \"on\": " + state.isOn() + " } } }";

map.add("clipmessage", body);

HttpEntity<String> entity = new HttpEntity<>(body, headers);

我有同樣的情況。 使用以下代碼后解決:

  restTemplate = new RestTemplate();

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
    FormHttpMessageConverter formMessageConverter = new FormHttpMessageConverter();
    messageConverters.add(formMessageConverter);
    messageConverters.add(converter);
    restTemplate.setMessageConverters(messageConverters);

參數和標題部分

...
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
        parameters.add("signature", "signature");
        //other parameters
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(parameters, headers);
ResponseEntity<ResponseMessage> responseEntity = restTemplate.postForEntity(url,  requestEntity, ResponseMessage.class);
ResponseMessage respMsg =responseEntity.getBody();
logMsg.append(",HTTP STATUS=").append(responseEntity.getStatusCode()).append(", RES:").append(marshal(respMsg));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM