genannt Ich habe folgendes Endpunkt in der Nachrüstung:jackson individueller Deserializer nicht
@GET("user/detail")
Observable<JacksonResponse<User>> getUserDetail();
Dieser Endpunkt liefert das folgende Ergebnis:
{
"code":1012,
"status":"sucess",
"message":"Datos Del Usuario",
"time":"28-10-2015 10:42:04",
"data":{
"id_hash":977417640,
"user_name":"Daniel",
"user_surname":"Hdz Iglesias",
"birthdate":"1990-02-07",
"height":190,
"weight":80,
"sex":2,
"photo_path":" https:\/\/graph.facebook.com
\/422\/picture?width=100&height=100"
}
}
Hier ist die Definition der Klasse ist:
public class JacksonResponse<T> {
private Integer code;
private String status;
private String message;
private String time;
@JsonInclude(JsonInclude.Include.NON_NULL)
private T data;
public JacksonResponse(){}
@JsonCreator
public JacksonResponse(
@JsonProperty("code") Integer code,
@JsonProperty("status") String status,
@JsonProperty("message") String message,
@JsonProperty("time") String time,
@JsonProperty("data") T data) {
this.code = code;
this.status = status;
this.message = message;
this.time = time;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
Ich möchte, dass der Inhalt "Daten" der Benutzerklasse zugeordnet ist, deren Extrakt hier angezeigt wird:
@JsonIgnoreProperties(ignoreUnknown = true)
@ModelContainer
@Table(database = AppDatabase.class)
public class User extends BaseModel {
@PrimaryKey(autoincrement = true)
private Long id;
@Column
private Long idFacebook;
@Column
@JsonProperty("user_name")
private String name;
@Column
@JsonProperty("user_surname")
private String surname;
@Column
private Date birthday;
@Column
@JsonProperty("height")
private Double height;
@Column
@JsonProperty("weight")
private Double weight;
@Column
private String tokenFacebook;
@Column
@JsonProperty("sex")
private Integer sex;
@Column
private String email;
@Column
private String token;
@Column
private Date lastActivity;
@Column
@JsonProperty("id_hash")
private Long idHash;
@Column
@JsonProperty("photo_path")
private String photoPath;
Zum Geburtstag habe ich einen benutzerdefinierten Deserializer definiert, dessen Code zeigt hier:
public class BirthdayDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = jsonparser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
ich dies mit als (bei User-Klasse) folge:
@JsonProperty("birthday")
@JsonDeserialize(using = BirthdayDeserializer.class)
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
aber wird nie genannt.
Irgendeine Idee was ist los?
Dank für die Beantwortung, aber ich schon habe ich JacksonResponse Klasse, wo T die User-Klasse ist die –
Sie in diesem Fall auf json auf „Daten“ -Feld entspricht benötigen eine individuelle Deserializer als Modul registrieren Dein Mapper. Überprüfen Sie die Hauptfunktion in meiner Antwort –