【问题标题】:How to add elements to the body of the Http request in android如何在android中将元素添加到Http请求的正文中
【发布时间】:2012-11-06 04:16:54
【问题描述】:

我想构造一个如下所示的 httprequest 来使用 post 请求访问其余的 web 服务。我已经使用 spring for android API 来生成请求。我可以使用 httpHeader.add 方法添加标题,但不知道将消息添加到正文。请求格式如下。

<?xml version="1.0" encoding="UTF-8"?>
<root>
<headers>
<messagetype>1</messagetype>
<uniquekey>95C75718-C774-DF4E-0DB4-A7AEF55077AA</uniquekey>
</headers>
<authentication>
<clientname>xxx</clientname>
<servicename>login</servicename>
<username>xxx123</username>
<password>welcome123</password>
</authentication>
</root>

我不知道如何添加那部分。请帮忙。

到目前为止我完成的代码如下

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;


public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView webservice = (TextView) findViewById(R.id.Webservice);

        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.TEXT_PLAIN);
        requestHeaders.add("messagetype", "1");
        requestHeaders.add("uniquekey", UniqueID.getUUID());
        HttpEntity<String> requestEntity = new HttpEntity<String>(requestHeaders);
        RestTemplate restTemplate = new RestTemplate();
        String url = "http://www.localhost:8080/restwebservice/login";
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
        String result = responseEntity.getBody();       

        webservice.setText(result);
    }   
}

【问题讨论】:

    标签: java android httprequest


    【解决方案1】:

    您需要创建一个Message 对象并将其传递给RestTemplate。请查看RestTemplate 文档的第 2.6.5 节了解详细信息。

    请注意,此处的示例与您的方法不同,它使用postForObject 而不是exchange。如果您仍想继续使用exchange,则应将您正在使用的HttpEntity 更改为requestEntity,并使用允许您将消息正文添加到其中的HttpEntityBasicHttpEntity 应该可以正常工作,尽管您必须在正文中手动构建 XML。另一方面,postForObject 使用适当的消息格式化程序将允许您传递普通的旧 Java 对象并自动将其正确序列化为 XML。消息格式化程序有很多选项,但我会推荐 Jackson,因为它速度很快并且得到很好的支持(尽管它以 JSON 支持而闻名,而对 XML 的支持较少)。

    【讨论】:

    • 有什么方法可以手动创建 xml 请求并将值作为字符串或其他东西传递?
    • 是的,您可以使用BasicHttpEntity,并使用包含您的XML 的InputStream 调用setContent,或者您可以使用StringHttpMessageConverter 并将您的XML 作为常规String 传递到postWithObject。但是请注意,如果您走这条路线,内容类型将设置为text/* 之一,而不是application/xml。这可能是也可能不是问题,具体取决于您在服务器端使用什么框架来解析 POST 请求正文。
    • 请给我最简单的示例代码,以便我可以将其用作模板来生成所有请求。
    • 好吧 penov 没问题,你提供的信息给了我一些思考。谢谢伙计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多