以不同的方式将类序列化为json

时间:2018-09-24 18:27:55

标签: java json serialization

有什么方法可以将一个类序列化为json,但仅包含我想在特定情况下使用的字段,而无需创建类的多个变体? 让我们举个例子:

class User{

    @JsonField
    private String name;

    @JsonField
    private String surname;

    @JsonField
    private String hashedCode;

    @JsonField
    private String city;

    @JsonField
    private String anotherDummyString;
}

现在,在我的一种方法中,我想映射到仅包含名称 city anotherDummyString 的json对象。

在第二种方法中,我要具有姓氏城市。在第三种方法中……。

有没有令人愉快和整洁的方法来实现这一目标? 我想知道是否可以“隐藏”我不需要的这些字段。

2 个答案:

答案 0 :(得分:0)

您是否正在寻找类似的东西? (使用javax.json)

JsonObject getJson1() {
    return Json.createObjectBuilder().add("name", this.name).add("city", this.city).build();
}
JsonObject getJson2() {
    return Json.createObjectBuilder().add("surname", this.surname).add("city", this.city).build();
}

只需.add即可在每个函数调用中使用。

答案 1 :(得分:0)

我希望您正在为Class中的字段寻找一种过滤器

这可以使用Jackson @JsonFilter

实现
package com.concretepage;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonFilter("student")
public class Student 
{
    @JsonProperty("name")
    private String name;

    @JsonProperty("surname")    
    private String surname;

    @JsonProperty("hashedCode") 
    private String hashedCode;

    @JsonProperty("city")   
    private String city;

    @JsonProperty("anotherDummyString") 
    private String anotherDummyString;

}  

为您在课堂上创建一个简单的过滤器

SimpleFilterProvider filterProvider = new SimpleFilterProvider();
filterProvider.addFilter("student",
        SimpleBeanPropertyFilter.serializeAllExcept("name", "city","anotherDummyString")); 

将其设置为对象映射器

ObjectMapper mapper = new ObjectMapper();
mapper.setFilterProvider(filterProvider); 

获取json消息

//Pass the student object  
String jsonData = mapper.writerWithDefaultPrettyPrinter()
               .writeValueAsString(student);

必须像上面创建一个样本过滤器一样,让您拥有2个类的差异