Java 序列化json时的动态属性名称
在使用SpringBootWeb开发RESTAPI时,我想使用Jackson向具有动态属性的RepsonseEntity返回一个类。返回包含人员的数组列表时,结果需要如下所示Java 序列化json时的动态属性名称,java,json,jackson,Java,Json,Jackson,在使用SpringBootWeb开发RESTAPI时,我想使用Jackson向具有动态属性的RepsonseEntity返回一个类。返回包含人员的数组列表时,结果需要如下所示 { "pages" : 1, "pageSize" : 20, "persons" : [] } { "pages" : 1, "pageSize" : 20, "animals" : [] } 当返回动物列表时,它需要看起来像 { "pages" : 1, "pageSize" : 2
{
"pages" : 1,
"pageSize" : 20,
"persons" : []
}
{
"pages" : 1,
"pageSize" : 20,
"animals" : []
}
当返回动物列表时,它需要看起来像
{
"pages" : 1,
"pageSize" : 20,
"persons" : []
}
{
"pages" : 1,
"pageSize" : 20,
"animals" : []
}
我现在有课了
公共类响应{
私人网页;
私有int页面大小;
私人名单;
...
}
@JsonProperty不会剪切,因为它不是动态的。@JsonSerializeusing=CustomSerializer.class也不会剪切它,因为它只允许我用其他标记“包装”该值。我在这里没有选择了,所以需要帮助。我的最后一个办法是返回一个HashMap,它会起作用,但我就是不喜欢它的外观。有人知道用杰克逊能不能做到这一点吗。其他框架不是选项:-.您必须为整个类编写自定义序列化程序,即JsonSerializer 有关更多信息,请查看以下内容:
有关更多信息,请查看此项:经过一番挖掘后,我采用以下解决方案
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);
也许它可以帮助Hi Juan,正如我在问题中提到的:HashMap可以做到这一点,但我更希望看到自定义对象/类。答案可能是,这不可能是我想要的。但也许这很容易做到。正如我所说的,我已经试过了。CustomSerializer将允许您动态地将标记添加到属性中,而不是添加到属性本身。该链接显示属性的名称p。这是我想要改变的。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-类上的序列化示例实现了这一点!我喜欢这个解决方案,谢谢!