【问题标题】:Spring resttemplate弹簧休息模板
【发布时间】:2014-02-28 19:49:25
【问题描述】:

如何发送 POST 请求,其中必须是消息正文中的查询参数?

我试过了:

MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
map.add("name", "xx");
map.add("password", "xx");

restTemplate.postForObject("URL", map, Response.class);

但它不起作用。我想将数据发送到 bitstamp api。

编辑:我的春豆似乎:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
        </list>
    </property>
</bean>

编辑 2:我的代码似乎

List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_JSON);// or any other

HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);

HttpEntity<String> requestEntity = new HttpEntity<String>("key=XX&nonce=XX&signature=XX", headers);
ResponseEntity<AccountBalance> responseEntity = restTemplate.exchange(
"https://www.bitstamp.net/api/balance/", HttpMethod.POST, requestEntity, AccountBalance.class);

现在的响应是:缺少密钥、签名和随机数参数

但应该是:找不到 API 密钥

【问题讨论】:

  • query parameters in message body 这是自相矛盾的。查询参数在url中,请求体就是请求体。
  • 是的,但是我在 SOAPUI 中做了,并且在正文中有按钮发布查询字符串,然后它就可以工作了。我不能用 restTemplate 得到相同的结果 :-(
  • 好的,那么如何使用 restTemplate 在请求正文中发送数据?因为,它对我不起作用。
  • 您似乎缺少一些核心 REST 概念。也许从这里开始:spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate 但您可能需要先对 REST 有更基本的了解。

标签: java spring rest


【解决方案1】:

现在可以了,谢谢大家 :-)

MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();
body.add("key", "XXX");
body.add("nonce", "XX");
body.add("signature", "XX");

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

HttpEntity<?> requestEntity = new HttpEntity<Object>(body, headers);

ResponseEntity<AccountBalance> responseEntity = restTemplate.exchange(bitstampBalanceUrl, HttpMethod.POST,
                requestEntity, AccountBalance.class);

【讨论】:

    【解决方案2】:

    你必须使用restTemplate.exchange

    示例:

    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(MediaType.APPLICATION_JSON);// or any other
    
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    
    HttpEntity<String> requestEntity = new HttpEntity<String>("name=XX&password=XX",headers);
    ResponseEntity<Response> responseEntity = restTemplate.exchange("URL", HttpMethod.POST, requestEntity, Response.class);
    

    【讨论】:

    • 我不明白为什么它不起作用。因为当我使用这种方法(POST 请求)时:mkyong.com/java/how-to-send-http-request-getpost-in-java 那么它就可以完美运行了。用resttemplate可以做到吗?
    • 请分享您的代码,可能是内容类型...或其他,分享您正在尝试做的事情
    • 你还在使用restTemplate.postForObject,而我建议你使用restTemplate.exchange
    猜你喜欢
    • 2020-03-19
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多