Java JACKSON:如何在使用JACKSON将POJO转换为JSON时忽略POJO名称?

Java JACKSON:如何在使用JACKSON将POJO转换为JSON时忽略POJO名称?,java,json,marshalling,jackson-databind,jackson2,Java,Json,Marshalling,Jackson Databind,Jackson2,我正在使用Jackson 2.10.1库将我的Java POJO转换为JSON,我得到了以下输出,我需要不带POJO名称的输出(这里是MyTestPojo),我尝试了各种Jackson注释,如@JSONIGNOReperties,但这些注释主要针对POJO中的成员,而不是POJO类名 { "MyTestPojo": [ { "CreatedBy": "user1", "Name": "testABC",

我正在使用Jackson 2.10.1库将我的Java POJO转换为JSON,我得到了以下输出,我需要不带POJO名称的输出(这里是MyTestPojo),我尝试了各种Jackson注释,如@JSONIGNOReperties,但这些注释主要针对POJO中的成员,而不是POJO类名

{
    "MyTestPojo": [
        {
            "CreatedBy": "user1",
            "Name": "testABC",
            "UpdatedBy": null,
            "UpdatedDate": null,
            "IsActive": true,
            "Value": "testABC1",
            "CreatedDate": "2017-03-13 15:41:54.0",
            "Description": "testABC"
        },
        {
            "CreatedBy": "user2",
            "Name": "testABC",
            "UpdatedBy": null,
            "UpdatedDate": null,
            "IsActive": false,
            "Value": "testABC2",
            "CreatedDate": "2017-03-13 15:41:54.0",
            "Description": "testABC"
        }
    ]
}
而我需要的是-

[
        {
            "CreatedBy": "user1",
            "Name": "testABC",
            "UpdatedBy": null,
            "UpdatedDate": null,
            "IsActive": true,
            "Value": "testABC1",
            "CreatedDate": "2019-03-13 15:41:54.0",
            "Description": "testABC"
        },
        {
            "CreatedBy": "user2",
            "Name": "testABC",
            "UpdatedBy": null,
            "UpdatedDate": null,
            "IsActive": false,
            "Value": "testABC2",
            "CreatedDate": "2020-03-10 15:41:54.0",
            "Description": "testABC"
        }
    ]
}
有没有办法用Jackson注释来处理这个问题

我用过的POJO是-

@JacksonXmlRootElement(localName = "ArrayOfTestPojos")
public class GetResponseVO {

    @JsonProperty("MyTestPojo")
    @JacksonXmlProperty(localName = "MyTestPojo")
    @JacksonXmlElementWrapper(useWrapping = false)
    private ArrayList<MyTestPojo> MyTestPojoList;

    public ArrayList<MyTestPojo> getMyTestPojoList() {
        return MyTestPojoList;
    }

    public void setMyTestPojoList(ArrayList<MyTestPojo> MyTestPojoList) {
        this.MyTestPojoList = MyTestPojoList;
    }

// standard getters and setters

}

您可以使用
JsonValue
注释来实现这个目的,它基本上是“使用这个属性的值,而不是序列化容器对象”。它也可用于
getter

@JsonValue表示带注释的“getter”方法的结果(这意味着签名必须是getter的结果;非void返回类型,无args)将用作实例序列化的单个值。值通常是简单的标量类型(字符串或数字),但它可以是任何可序列化类型(集合、映射或Bean)

如果只想更改JSON结构(而不影响xml),可以使用
MixIn

public interface JsonMixin {

   @JsonValue
   List<MyTestPojo> getMyTestPojoList();   
}

请将相关的POJO和您尝试过的内容添加到您的问题中。@Pieterjandocinck补充道,不确定使用jackson注释是否可行。您可以尝试编写自定义反序列化程序。它确实有效,我得到了所需的JSON,但正如我在问题部分中提到的,我还将其转换为XML(根据用户请求,它可以是JSON或XML),使用@JsonValue时,XML代码失败,错误为“com.fasterxml.jackson.core.jsongGenerationException:尝试输出第二个根”
@JsonValue
@JacksonXmlProperty(localName = "MyTestPojo")
@JacksonXmlElementWrapper(useWrapping = false)
private ArrayList<MyTestPojo> MyTestPojoList;
{[{"x":"value"}, ...]}
public interface JsonMixin {

   @JsonValue
   List<MyTestPojo> getMyTestPojoList();   
}
objectMapper.addMixIn(GetResponseVO.class, JsonMixin.class);