首页 / JAVA / java-未调用杰克逊自定义解串器
java-未调用杰克逊自定义解串器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-未调用杰克逊自定义解串器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4840字,纯文字阅读大概需要7分钟。
内容图文
![java-未调用杰克逊自定义解串器](/upload/InfoBanner/zyjiaocheng/666/dd91c61bc97f468e8460f789ba115b3c.jpg)
我在翻新中有以下端点:
@GET("user/detail")
Observable<JacksonResponse<User>> getUserDetail();
该端点返回以下结果:
{
"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"
}
}
这是类的定义:
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;
}
}
我希望将内容“数据”映射到用户类,其提取内容在此处显示:
@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;
迄今为止,我已经定义了一个自定义反序列化器,其代码如下所示:
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);
}
}
}
我使用它如下(在用户类):
@JsonProperty("birthday")
@JsonDeserialize(using = BirthdayDeserializer.class)
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
但这从未被称为.
知道发生了什么吗?
解决方法:
您Pojo和JSON不映射.您需要有一个Data.java,它应该具有JSON中给定的属性.您的类应基于上面给出的json如下.
User.java
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
@JsonProperty("code")
public Integer code;
@JsonProperty("status")
public String status;
@JsonProperty("message")
public String message;
@JsonProperty("time")
public String time;
@JsonProperty("data")
public Data data;
}
Data.java
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Data {
@JsonProperty("id_hash")
public Integer idHash;
@JsonProperty("user_name")
public String userName;
@JsonProperty("user_surname")
public String userSurname;
@JsonProperty("birthdate")
@JsonDeserialize(using = BirthdayDeserializer.class)
public Date birthdate;
@JsonProperty("height")
public Integer height;
@JsonProperty("weight")
public Integer weight;
@JsonProperty("sex")
public Integer sex;
@JsonProperty("photo_path")
public String photoPath;
}
Main.java to test it.
public class Main {
public static void main(String[] args) throws IOException {
String json = "{\n" +
" \"code\": 1012,\n" +
" \"status\": \"sucess\",\n" +
" \"message\": \"Datos Del Usuario\",\n" +
" \"time\": \"28-10-2015 10:42:04\",\n" +
" \"data\": {\n" +
" \"id_hash\": 977417640,\n" +
" \"user_name\": \"Daniel\",\n" +
" \"user_surname\": \"Hdz Iglesias\",\n" +
" \"birthdate\": \"1990-02-07\",\n" +
" \"height\": 190,\n" +
" \"weight\": 80,\n" +
" \"sex\": 2\n" +
" }\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Date.class, new BirthdayDeserializer());
mapper.registerModule(module);
User readValue = mapper.readValue(json, User.class);
}
}
内容总结
以上是互联网集市为您收集整理的java-未调用杰克逊自定义解串器全部内容,希望文章能够帮你解决java-未调用杰克逊自定义解串器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。