Инициализировать пользовательское свойство, когда свойство json сериализовано в Android GSON? - PullRequest
0 голосов
/ 16 декабря 2018

Я использую модификацию с gson, у меня есть и получает FullName от сервера в JSON, теперь я хочу добавить два property к этому Pojo class, и я хочу получить firstName и lastName пользователя.Я добавляю свою логику в метод установки: FullName
EX:

     public class MyPojo {

            @SerializedName("full_name")
            @Expose
            private String fullName;

            // property not in json
           String firstName;
           String lastName;

     public void setFullName(String fullName){
        this.fullName = fullName;

    //**‼️** Here i want to add some logic and intialise first name and last name 

this.firstName = // Some value 
this.lastname = // some value

       }

    }

Как я могу инициализировать firstName и lastName при fullName инициализации

Ответы [ 2 ]

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

Попробуйте JsonDeserializer.Имея класс вроде:

@Getter @Setter
public class MyPojo {
    private String fullName, firstName, lastName;
}

и JSON вроде:

{
    "fullName": "Firstname Lastname"
}

, вы можете реализовать такой адаптер, как:

public class MyPojoAdapter implements JsonDeserializer<MyPojo> {
    @Override
    public MyPojo deserialize(JsonElement json, Type typeOfT, 
                                    JsonDeserializationContext context)
            throws JsonParseException {
        MyPojo n = new Gson().fromJson(json, typeOfT);
        String[] names = n.getFullName().split(" "); // or whatever your logic is
        n.setFirstName(names[0]);
        n.setLastName(names[1]);
        return n;
    }
}

Затем, прежде чем зарегистрировать Gson в Retrofitвам нужно добавить:

gson.registerTypeAdapter(MyPojo.class, new MyPojoAdapter());
0 голосов
/ 16 декабря 2018

Вы должны сделать это в getter, а не setter, как в

public class MyPojo {

            @SerializedName("full_name")
            @Expose
            private String fullName;

            // property not in json
           String firstName;
           String lastName;

           public String getFirstName(){
             this.firstName = "some value"; // can use fullName here
             return firstName;
           } 

           public String getLastName(){
             this.lastName = "some value"; // can use fullName here
             return lastName;
           } 

}
...