@JsonProperty的使用

来源:互联网 发布:mac mini 2018 编辑:程序博客网 时间:2024/06/05 17:43

一、jackson的maven依赖

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.5.3</version></dependency>

@JsonProperty 此注解用于属性上,作用是把属性的名称序列化为另外一个名称,如把name序列化成userName。

二、实体类的建立

import com.fasterxml.jackson.annotation.JsonProperty;public class Person {    private Integer id;    @JsonProperty("userName")    private String name;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "Person [id=" + id + ", name=" + name + "]";    }}

三、测试类代码:

import java.io.IOException;import com.fasterxml.jackson.databind.ObjectMapper;public class JSONTest {    public static void main(String[] args) throws IOException {        Person p = new Person();        p.setId(1001);        p.setName("huangbaokang");        // 在name字段上未加@JsonProperty注解时,打印{"id":1001,"name":"huangbaokang"}        // 加上@JsonProperty注解时,控制台打印输出{"id":1001,"userName":"huangbaokang"}        System.out.println(new ObjectMapper().writeValueAsString(p));    }}

使用@JsonProperty注解特别有用,新建数据库实体类Model,由于后期数据库字段名可能有所改变,在进行后台数据库查询返回给客户端时,我们可以控制输出的字段,如上述代码,我们把原本输出的name字段改成了userName,达到了我们的目的。

四、对象的反序列化

import java.io.IOException;import com.fasterxml.jackson.databind.ObjectMapper;public class JSONTest {    public static void main(String[] args) throws IOException {        // 对象的反序列化,使用readValue方法对json字符串进行反序列化        String jsonStr = "{\"id\":\"1002\",\"userName\":\"HuangBaoKang\"}";        Person person = new ObjectMapper().readValue(jsonStr.getBytes(), Person.class);        // 控制台打印输出Person [id=1002, name=HuangBaoKang]        System.out.println(person);    }}

在项目各种服务使用Json数据进行通信传输时,有了@JsonProperty注解,我们可以反序列化成我们想要的对象。

原创粉丝点击