Как получить список JSON-объектов из ответа, включая другой параметр - PullRequest
1 голос
/ 19 мая 2019

Я продолжаю изучать модернизацию и хочу обработать ответ от сервера.

Структура ответа от Почтальона

{
    "succeeded": false,
    "errors": [
        {
            "code":"DuplicateUserName",
            "description":"User name 'XXX' is already taken."
        },
        {
            "code": "PasswordTooShort",
            "description": "Passwords must be at least 6 characters."
        },
        {
            "code": "PasswordRequiresLower",
            "description": "Passwords must have at least one lowercase ('a'-'z')."
        },
        {
            "code": "PasswordRequiresUpper",
            "description": "Passwords must have at least one uppercase ('A'-'Z')."
        }
    ]
}

код POST

Call<RegisterResponseModel> register(@Body UserJSONModel user);

RegisterResponseModel

    private String succeeded;
    private ArrayList<String> errors;

Я пытался использовать List, ArrayList и просто String и даже сериализовать:

@SerializedName("errors")
@Expose

Но независимо от попыток я получаю что-то, что должно быть успехом = ложь и список ошибок

‹      í˝`I–%&/mĘ{JőJ×ŕtˇ€`$Ř�@ěÁ�Íć’ěiG#)«*�ĘeVe]f@Ě흼÷Ţ{ď˝÷Ţ{ď˝÷ş;ťN'÷ß˙?\fdlöÎJÚÉž!€ŞČ?~|?"~ńGÍz:ÍóY>űčŃyV6ů裼®«şůčŃ÷~ńGÓj–ô裧ëUYLł6˙ŞÉëŮ"˙hôŃ,o¦u±j‹jI-đEş¤oŇŹ_eçă´hҬ¬ólvť¶ŮŰ|9ţč—|˙—

Ответы [ 3 ]

0 голосов

Вы можете проанализировать этот json с ошибками ArrayList;

import java.util.List;

открытый класс RegisterResponseModel {

private boolean succeded;
private List<Error> errors;

public boolean isSucceded() {
    return succeded;
}

public void setSucceded(boolean succeded) {
    this.succeded = succeded;
}

public List<Error> getErrors() {
    return errors;
}

public void setErrors(List<Error> errors) {
    this.errors = errors;
}

@Override
public String toString() {
    return "TestDTO [succeded=" + succeded + ", errors=" + errors + "]";
}

}

public class Error {

private String code;
private String description;

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

@Override
public String toString() {
    return "Error [code=" + code + ", description=" + description + "]";
}

}

0 голосов
/ 19 мая 2019

Добавьте это в свой метод сообщения @ FormUrlEncoded

0 голосов
/ 19 мая 2019

Не рассматривайте этот случай как случай успеха.Если бэкэнд возвращает вам ошибку, вы должны обработать ее как ошибки.Я использую пользовательский перехватчик для okHttp, как это

class ErrorInterceptor : Interceptor {

@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
    val request = chain.request()
    val response = chain.proceed(request)
    if (<Check is repsonce fail>) {
        val body = response.body()
        body?.let(::parseBackendError) ?: throw IOException("Body is null")
    }
    return response
}

private fun parseBackendError(responseBody: ResponseBody) {
    <Parce your error list and throw exeption>
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...