+
 新版

jackson json 关于序列化与反序列化时json中字段名称的问题

IncRediblE 发布于 2014/07/24 15:52
阅读 35K+
收藏 2

Json如下

{

    "student_id": 1

}

model如下:

class Student {
    @JsonProperty("student_id")
    private int studentId;

    public Student() {}
    public int getStudentId() {
        return studentId;
    }
    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }
}
这时候使用jackson是可以将json转为此model,

问题是,我再把这个model转成json时,我想变成

{

    "studentId": 1

}

该怎么办


===============================================

参考stackoverflow

class Student {
    
    private int studentId;

    public Student() {}
    @JsonIgnore
    public int getStudentId() {
        return studentId;
    }
    @JsonProperty("student_id")
    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }
    @JsonProperty("studentId")
    public int getJavaStudentId() {
        return studentId;
    }
}



大概就是类字段或该字段所在的get和set其中一个被@JsonProperty标注了,序列化反序列化都统一了。

当再写一个get方法时,若被@JsonProperty标注了,反序列化时,就会多出这个字段。

所以正宗的get上要加个@JsonIgnore。

    没有看源码。。。就这样猜的


加载中
0
荒野无灯
荒野无灯
private是不行的。public 试试。
刘付kin
刘付kin
只要get和set的方法是public即可,一般bean中的属性都设置为private,只能够通过get和set对他进行操作,这样提高安全性
刘付kin
刘付kin
private也是可以的
0
烽焱10仴
烽焱10仴
请楼主查看alibaba 的 fastjson (一个java类库)中 的 注解 @JSONField的使用。
0
kimmking
kimmking

Jackson的作者估计也没想到你这个使用场景。JsonProperty注解的信息,没办法处理了。

再加一个StudentBO,或者用另外一种不能识别jackson定义的@JsonProperty注解的库。


0
50块钱好兄弟
50块钱好兄弟
objectMapper.writeValue(System.out, model);这样行吗?
IncRediblE
IncRediblE
额,不是这个意思 ,我这个其实是拉取别人资源->转成自己model->输出自己json,其中自己json字段是与原json字段名称有差异的,就是这么个过程,不是单独转化model变成json
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部