有什么方法可以将一个类序列化为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对象。
在第二种方法中,我要具有姓氏和城市。在第三种方法中……。
有没有令人愉快和整洁的方法来实现这一目标? 我想知道是否可以“隐藏”我不需要的这些字段。
答案 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个类的差异