@JsonProperty和@SerializedName对比

@JsonProperty和@SerializedName对比

时间:2018-12-30

本文章向大家介绍@JsonProperty和@SerializedName对比,主要包括@JsonProperty和@SerializedName对比使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题

  1. 在日常开发中经常需要将一个json格式的字符串转换成某个java对象,当json字符串中的字段跟java对象中定义的属性名不一致时,就会出现转换错误。
  2. 将一个java对象转换成json格式的字符串,并且要求转换后的字符串中字段名跟原java对象中的属性名不一致。

例子:1. 将json字符串转换成Java对象;2. 将java对象转换成指定的json字符串

  • json格式的字符串
String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
  • java对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyBean {
    private String name;
    private String address;
    private int age;
    @Override
    public String toString() {
        return "MyBean{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", age=" + age +
                '}';
    }
}

解决方法

       如何解决上面两个常见问题呢?其实很简单只需要在java对象的属性上加上@JsonProperty@SerializedName即可解决问题。

       @JsonProperty@SerializedName在功能上是可以互换的,都可以满足以上要求,只是在用法上略有不同。

@JsonProperty

@JsonPropertycom.fasterxml.jackson.annotation下使用频率很高的一个常用注解,用于将json字符串中的某个字段和java对象中的某个属性进行匹配映射,同时可以将java对象中的属性转换为指定字段的json字符串。

演示

  1. 在java属性上加上@JsonProperty注解:
    @JsonProperty("jsonName")
    private String name;
  1. 测试
@Test
    public void testJsonProperty() throws IOException{
        String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
        ObjectMapper mapper = new ObjectMapper();
        Object myBean1 = mapper.readerFor(MyBean.class).readValue(jsonBean1);

        System.err.println("Convert json to java: "+ myBean1.toString());

        MyBean myBean = new MyBean("xyz", "China", 12);
        System.err.println("Conver java to json: " + mapper.writeValueAsString(myBean));
    }
  1. 运行结果
    @JsonProperty和@SerializedName对比_第1张图片

@SerializedName

@SerializedNamecom.google.gson.annotations下的常用注解,作用和@JsonProperty差不多。

演示

  1. 在java属性上加上@SerializedName注解:
    @SerializedName("jsonName")
    private String name;
  1. 测试
@Test
    public void testFromJeson() throws IOException {
        String jsonBean1 = "{\"jsonName\":\"xyz\",\"age\":\"12\",\"address\":\"china\"}";
        MyBean myBean = new MyBean("xyz", "China", 12);

        // 注意:写法和@JsonProperty不同
        Gson gson = new Gson();
        MyBean myBean1 = gson.fromJson(jsonBean1, MyBean.class);
        System.err.println("jesonBean1: "+ myBean1.toString());

        String toJson = gson.toJson(myBean);
        System.err.println("toJson: " + toJson);
    }
  1. 运行结果
    @JsonProperty和@SerializedName对比_第2张图片

扩展

这里只是简单的列举了两个常见的注解,想要了解更多的注解和实例,可以查看以下官网进行学习:

  1. https://www.baeldung.com/jackson-annotations
  2. http://www.javacreed.com/simple-gson-example/

你可能感兴趣的:(Java)