使用Spring Boot Web开发REST Api,我想使用Jackson将具有动态属性的类返回给RepsonseEntity。当返回带有Persons的数组列表时,结果需要类似于
{
"pages" : 1,
"pageSize" : 20,
"persons" : []
}
返回带有动物的列表时,它的外观应类似于
{
"pages" : 1,
"pageSize" : 20,
"animals" : []
}
我现在有一个课程
public class APIResponse {
private int pages;
private int pageSize;
private List<T> list;
...
}
@JsonProperty不会剪切,因为它不是动态的。 @JsonSerialize(使用= CustomSerializer.class)也不会削减它,因为它只允许我用其他标签“包装”值。我在这里用尽所有选项,因此寻求帮助。我的最后一招是返回实现此功能的HashMap,但我只是不喜欢它的外观。有谁知道这是否可以使用杰克逊来完成。其他框架不是一种选择:-(。
答案 0 :(得分:1)
您必须为整个类编写一个自定义的序列化程序,即JsonSerializer
有关更多信息,请检查以下内容:jackson-custom-serialization-on-class
有关更多信息,请检查以下内容:jackson-dynamic-property-names
答案 1 :(得分:0)
经过一番挖掘,我找到了以下解决方案
public class ApiResponse {
private int pages;
private int pageSize;
...
}
...
ApiResponse response = new ApiResponse();
...
List<Person> persons = new ArrayList<>();
...
//convert object to json
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.valueToTree(response);
objectNode = jsonNode.deepCopy();
//add the dynamic property
objectNode.set(resourceName, mapper.valueToTree(persons));
String json = mapper.writeValueAsString(node);