Установка необязательных полей в объекте запроса аннотации gson - PullRequest
0 голосов
/ 27 марта 2019

У меня есть два поля в моей карточке класса и qrCode:

public class User{
    @SerializedName("card")
    private String card;

    @SerializedName("qrCode")
    private boolean qrCode
    ...
}

Я делаю запрос с сериализацией этого объекта. Однако в моем бэкэнде эти поля не существуют до развертывания. Старые значения были объектами, а не строковыми или логическими.

Из-за этого я получаю эту ошибку в своем ответе:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1

Есть ли способ сделать эти поля необязательными в моем запросе?

Мой ответ: JSON:

{"success":true,"msg":"founded","data":{..."card":{"success":false,"msg":"Not found","data":null}}}

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вам необходимо реализовать собственный десериализатор, который преобразует JSON object в String:

class ObjectOrStringJsonDeserializer implements JsonDeserializer<String> {

    @Override
    public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
        if (json.isJsonPrimitive()) {
            return json.getAsJsonPrimitive().getAsString();
        }
        if (json.isJsonObject()) {
            return json.getAsJsonObject().toString();
        }
        return null;
    }
}

Вы можете использовать его, как показано ниже:

@SerializedName("card")
@JsonAdapter(ObjectOrStringJsonDeserializer.class)
private String card;

И пример использования:

Gson gson = new GsonBuilder().create();
String json = "{\"card\":{\"success\":false,\"msg\":\"Not found\",\"data\":null}}";
System.out.println(gson.fromJson(json, User.class));

Печать:

User{card='{"success":false,"msg":"Not found","data":null}', qrCode=false}

То же самое вы можете сделать для boolean qrCode. Вам нужно написать собственный десериализатор, который преобразует JSON object в boolean и зарегистрировать его, используя аннотацию @JsonAdapter.

0 голосов
/ 27 марта 2019

Это не проблема с параметрами. Это проблема с вашим ответом, который вы получите.

Возможно, проблема в том, что вы получаете JSONObject, как в вашем ответе, но вы приводите эти параметры как string.

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