我在从Android应用程序向Android应用程序发送POST请求时遇到问题(使用Spring for Android)
我有以下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中格式化用户才能使用它?
我非常感谢你的帮助!
答案 0 :(得分:1)
请确保您的控制器配置接受POST方法,可能只是接收GET。
您可以使用RestClient(Firefox或Chrome插件)来测试您的API。
答案 1 :(得分:1)
post
必须遵循一些问题。
您需要发布类似以下内容的数据:
{"user_params" : {"email":"test@fromandroid.com","name":"testName"}}
创建用户(根据您的控制器)。
要发布数据,请添加请求标头。在您发送json
数据时,标题将为Content-Type: application/json
。
另外,我建议你使用名为“RESTClient”的FireFox插件来模拟这种情况。
感谢。