【问题标题】:How to send POST request from Android app to Rails application?如何将 POST 请求从 Android 应用程序发送到 Rails 应用程序?
【发布时间】:2014-02-19 08:27:16
【问题描述】:

我在从 Android 应用程序(使用 Spring for Android)向我的 rails 应用程序发送 POST 请求时遇到问题

我有以下 Rails 控制器:

  # POST /users
  # POST /users.json

  def create
@user = User.new(user_params)

respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render action: 'show', status: :created, location: @user }
  else
    format.html { render action: 'new' }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end
  end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :email)
end

我正在发送 POST 请求(使用 Spring for Android):

        RestTemplate restTemplatePost = new RestTemplate();
        restTemplatePost.getMessageConverters().add(new StringHttpMessageConverter());


        UserDto user = new UserDto();
        user.name = "testName";
        user.email = "test@fromandroid.com";

        Gson gson = new Gson();
        String request = gson.toJson(user);
        restTemplatePost.postForObject(createUserUrl, request, String.class);
        } catch(RestClientException e) {
            Log.e("POST",e.getLocalizedMessage());
        }

字符串请求的值为 {"email":"test@fromandroid.com","name":"testName"}

createUserUrl 的值为:http://10.0.0.2:3000/users

但是,我仍然收到以下错误:

> W/RestTemplate(3299): POST request for "http://10.0.0.2:3000/users"
> resulted in 400 (Bad Request); invoking error handler

我可以发送 GET 请求,但 POST 不起作用。我究竟做错了什么? 我使用 CURL 来获得更好的错误消息并返回:

param not found: user 

所以问题可能出在 REST API 接受的必需用户和可选名称和电子邮件参数上,但是我应该如何在 json 中格式化用户以使其正常工作?

非常感谢您的帮助!

【问题讨论】:

    标签: android ruby-on-rails spring rest spring-android


    【解决方案1】:

    请确保您的控制器配置接受 POST 方法,可能只是接收 GET。

    RailsController

    RailsRouting

    您可以使用 RestClient(Firefox 或 Chrome 的插件)来测试您的 api。

    Rest Client - Firefox

    Rest Client - Chrome

    【讨论】:

      【解决方案2】:

      有一些问题你必须关注post

      1. 您需要发布如下数据:

        {"user_params" : {"email":"test@fromandroid.com","name":"testName"}}

        创建用户(根据您的控制器)。

      2. 要发布数据,请添加请求标头。当您发送json 数据时,标题将为Content-Type: application/json

      另外我建议你使用名为“RESTClient”的 FireFox 插件来模拟这种情况。

      谢谢。

      【讨论】:

      • 感谢您的回答。显然,数字 1. 并不完全正确。它应该是: {"user" : {"email":"test@fromandroid.com","name":"testName"}} 或者只是 {"email":"test@fromandroid.com","name" :“测试名称”}。刚刚检查,两者都工作。我认为问题在于我使用 Spring for Android 的方式。还没有完全解决它,但我几乎可以肯定我需要使用不同的转换器。感谢您提到 RestClient 插件 - 真的很有帮助!
      猜你喜欢
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多