【问题标题】:Where does Android RESTful POST go?Android RESTful POST 去哪儿了?
【发布时间】:2013-01-02 02:59:41
【问题描述】:

我想首先说我是 Android 和 java 的新手(在较小程度上)。我有一个客户端-服务器应用程序,客户端是一个 Android 应用程序,服务器正在运行 Tomcat。考虑到我是新手,我对 POST 请求有点困惑。客户端有几个文本字段,用户输入信息并点击一个按钮,该按钮调用一个可以很好地完成 POST 任务的方法。我可以看到服务器从客户端的 POST 表单接收数据,但我的问题是这些信息(来自表单)去哪里了?它应该创建一个新资源(在本例中为 Person 资源)...这是执行 POST 的 PersonResource 类的代码。

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Person postPerson(MultivaluedMap<String, String> personParams) {
    String firstName = personParams.getFirst(FIRST_NAME);
    String lastName = personParams.getFirst(LAST_NAME);
    String email = personParams.getFirst(EMAIL);

    System.out.println ("System storing: " + firstName + " " + lastName + " " + email);

    person.setFirstName(firstName);
    person.setLastName(lastName);
    person.setEmail(email);

    System.out.println ("person info: " + person.getFirstName() + " " + person.getLastName() + " " + person.getEmail() + " " + person.getId());

    return person;
}

它返回一个人员资源,但最终该人员资源到哪里去了?如果我没有提供解决此问题所需的所有必要信息,我深表歉意。如果需要更多信息,我很乐意提供。我真的很感激给予的任何帮助。谢谢。

【问题讨论】:

  • 使用您的代码,您只是获取和设置,但代码中的 url 和 httpPost() 方法在哪里。如果您使用调用此方法的代码编辑问题会更好

标签: java android rest post


【解决方案1】:

我不确定我是否完全理解了这个问题,但这里有一个可能会有所帮助的概述:

客户端 POST 向服务器发送 HTTP 请求。服务器必须具有某种处理请求的 Web 服务框架(例如 Jersey 或 CXF 或...)。类上的 JAX-RS 注释(@POST 和 @Consume)指示 Web 服务框架将请求路由到类的 postPerson 方法。听起来这很有效,是吗?

然后,您的方法会根据表单的内容(即用户输入)构造一个 Person 对象。您的方法将此 Person 返回到 Web 服务框架。

那么这个人会怎么样呢?您提供的 @Produces 注释指示 Web 服务框架生成人员的 JSON 表示并将其包含在发送回客户端的 HTTP 响应的正文中。响应可能如下所示:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 259
{"fistName":"Bob", "lastName":"Barker", "email":"bob_bark@priceisright.com"}

这是你要找的吗?

【讨论】:

  • 是的,这是一个很好的解释,我感谢你。所以... Web 服务框架在 JSON 表示形式中包含新的人员信息,该表示形式在 HTTP 响应中发送回客户端。这引发了另一个问题:我认为 POST 是在服务器上创建一个新资源(或者这就是我需要它来做的/将这个新人信息添加到某种数据库中)......谢谢你,这很有帮助不过。
  • 你是对的。 REST 风格(和 HTTP 规范)规定 POST 应该创建一个新资源,并且您的 postPerson 方法有责任按照您的建议将此人员信息添加到数据库中。
【解决方案2】:

您可以使用 HttpPost 提交请求,然后使用 gson 将响应转换回对象。 HttpPost 应该放在异步请求(即 AsyncTask)下。可以参考

http://www.androidsnippets.com/executing-a-http-post-request-with-httpclient

Async HTTP post android

http://code.google.com/p/google-gson/

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 2011-03-03
    • 2014-03-15
    • 2015-07-17
    • 2012-10-30
    • 2013-05-23
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多