Я пытаюсь подключить приложение Android к приложению RoR, чтобы оно могло создать нового пользователя, но независимо от того, что я делаю, я всегда получаю «Unprocessable Entity».Сейчас я использую Kotlin вместо Java.
users_controller.rb
class Api::V1::UsersController < ApplicationController
before_action :set_article, only: [:show, :update, :destroy]
def show
render json: @article
end
def create
@user = User.new(user_params)
if @user.save
render json: @user, status: :created, location: api_v1_article_url(@user)
else
render json: @user.errors, status: :unprocessable_entity
end
end
def update
if @article.update(article_params)
render json: @article
else
render json: @article.errors, status: :unprocessable_entity
end
end
def destroy
@article.destroy
end
private
def set_article
@article = Article.find(params[:id])
end
def user_params
params.permit(:name, :lastName, :email, :password, :password_confirmation)
end
end
MainActivity.kt
internal inner class UserCreator : AsyncTask<String, Void, String>() {
override fun doInBackground(vararg params: String): String {
lateinit var response: StringBuffer
try{
val mURL = URL("http://10.0.2.2:3000/api/v1/users")
val reqParam = JSONObject()
val holder = JSONObject()
reqParam.put("name", params[0])
reqParam.put("lastName", params[1])
reqParam.put("email", params[2])
reqParam.put("password", params[3])
reqParam.put("password_confirmation", params[4])
holder.put("user", reqParam)
with(mURL.openConnection() as HttpURLConnection) {
requestMethod = "POST"
val wr = OutputStreamWriter(getOutputStream());
wr.write(holder.toString());
wr.flush();
println("URL : $url")
println("Response Code : $responseCode")
BufferedReader(InputStreamReader(inputStream)).use {
response = StringBuffer()
var inputLine = it.readLine()
while (inputLine != null) {
response.append(inputLine)
inputLine = it.readLine()
}
it.close()
}
}
}catch(e: RuntimeException){
Toast.makeText(this@MainActivity, e.message, Toast.LENGTH_LONG).show()
}
return response.toString()
}
}
Кто-то знает, что я делаю не так?Я понимаю, что должен отправить JSONObject () с запросом POST, но он не позволяет мне это сделать, я могу только отправлять строки.
ОШИБКА
Started POST "/api/v1/users" for 127.0.0.1 at 2018-12-27 20:26:09 -0600
Processing by Api::V1::UsersController#create as HTML
Parameters: {"{\"name\":\"Test\",\"lastName\":\"Tester\",\"email\":\"test@test.com\",\"password\":\"foobar\",\"password_confirmation\":\"foobar\"}"=>"[FILTERED]"}
Unpermitted parameter: :{"name":"Test","lastName":"Tester","email":"test@test.com","password":"foobar","password_confirmation":"foobar"}
(0.7ms) BEGIN
app/controllers/api/v1/users_controller.rb:11
User Exists (3.9ms) SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT $1 [["LIMIT", 1]]
app/controllers/api/v1/users_controller.rb:11
(0.4ms) ROLLBACK
app/controllers/api/v1/users_controller.rb:11
Completed 422 Unprocessable Entity in 174ms (Views: 2.4ms | ActiveRecord: 38.6ms)