Модифицировать преобразовать мои поля Int в строку - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь использовать модифицированную библиотеку.У меня есть веселье:

    @FormUrlEncoded
@POST("login")
fun login(@Field("username") username: String,
          @Field("password") password: String,
          @Field("_auth_code") authCode: Int = 0

): Observable<String>

и определение моего модифицированного объекта:

Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl("https://preprod.itineraire.sanilea.tech/api/v1/")
                .client(get())
                .build()

 retrofit.create(RestApi::class.java)
            .login(UserManager.username, UserManager.password, editextToken.text.toString().toInt())
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(

                    {

                        updateUiLogin()


                        val token = JwtManager.decodeTokenClaims(it)
                        UserManager.jwtToken = it

                        toast("Connexion réussis")

                    },
                    { e ->

                        e as HttpException
                        updateUiLogin()

                        toast(R.string.an_error_occured)
                        Log.w(TAG, e.message())
                    }
            )

, но когда я делаю мой запрос, мое поле "_auth_code" принимается как строка на сервер.

enter image description here

Я не должен быть преобразован в строку?

Спасибо

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Поставьте вместо int - long.

Пример: введите код здесь @Field ("_ auth_code") authCode: long = 0

0 голосов
/ 19 сентября 2018

Это из-за @FormUrlEncoded и @Field.Если я сохраню своего пользователя следующим образом:

@POST("users")
@FormUrlEncoded
Call<User> registerFormUser(@Field("name") String name,
                            @Field("verified_acc") boolean verified_acc,
                            @Field("points") int points);

, то результатом JSON будет:

{
    "name": "Robert",
    "verified_acc": "false",
    "points": "0",
    "id": 8
}

Так что мои логические значения и значения int теперь являются строками.

Ноесли вы сохраните его следующим образом:

@POST("users")
Call<User> registerUser(@Body User user);

, то результатом JSON будет:

{
    "id": 9,
    "name": "George",
    "points": 0,
    "verified_acc": false
}

Единственная проблема со вторым подходом состоит в том, что он меняет порядок в алфавитном порядке.Если у вас нет проблем с этим, можно сохранить его без преобразования полей в строки.

0 голосов
/ 25 апреля 2018

Я создал такой объект:

data class UserLogin(val username: String, val password: String, val code: Int = 0)

И сделай это

@POST("login")
fun login(@Body user: UserLogin

): Observable<String>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...