Как установить нулевой объект, если все его поля нулевые? - PullRequest
0 голосов
/ 27 декабря 2018

Как установить нулевой объект, если все его поля равны нулю?

Десериализация

Gson gson = new Gson();
DetailUser detailUser = gson.fromJson(json, DetailUser.class);

DetailUser где отключитьдолжен быть нулевым, если все его поля равны нулю

public class DetailUser {
    String email;
    Integer age;
    Disconnect disconnect;
}

Отключить

public class Disconnect {
    String text;
    String beginning;
    String end;
}

JSON , при котором disconnect должно быть равно нулю

{
    "email":"test@test.test",
    "age":33,
    "disconnect":{}
}

JSON , при котором disconnect должно не быть нулевым

{
    "email":"test@test.test",
    "age":33,
    "disconnect":{
                  "text":"test",
                  "beginning":"test",
                  "end":"test"
                 }
}

Я ожидаю, detailUser.getDisconnect()==null будет trueно получите false, когда Disconnect поля (текст, начало, конец) все null.

1 Ответ

0 голосов
/ 27 декабря 2018

Ваша проблема в том, что в вашем json есть объект Disconnect, у которого есть все поля null.Gson работает должным образом, но если вы хотите, чтобы Disconnect было null, когда все его поля null, у вас есть несколько вариантов.

Один из вариантов - создать пользовательский JsonDeserializer, например:

public class NullAdapter implements JsonDeserializer<Disconnect> {
    @Override
    public Disconnect deserialize(JsonElement json, Type typeOfT,
                JsonDeserializationContext context)
            throws JsonParseException {
        Disconnect dc = new Gson().fromJson(json, typeOfT);
        // Here you decide the criteria in which case to return the Disconnect or null
        // I decided that if any of its fields is not null it is neither null
        if (dc.beginning != null || dc.text != null || dc.end != null) {
            return dc;
        }
        return null;
    }
}

Проверьте это, зарегистрировавшись с GsonBuilder():

@Test
public void test() {
    DetailUser du = new GsonBuilder()
            .registerTypeAdapter(Disconnect.class, new NullAdapter())
            .create()
            .fromJson(**YOUR_NULL_JSON**, DetailUser.class);
    assertNull(du.disconnect);
}
...