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



我正在使用 Jackson 2.10.1 库将我的 Java POJO 转换为 JSON,我得到了以下输出,我需要没有 POJO 名称的输出(MyTestPojo 在这里(,我已经尝试了各种杰克逊注释,例如 @JsonIgnoreProperties 但这些注释主要针对 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"
}
]
}

有没有办法用杰克逊注释来处理这个问题?

我使用的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
}

@JacksonXmlRootElement(localName = "MyTestPojo")
public class MyTestPojo {
@JsonProperty("Name")
private String name;
@JsonProperty("Description")
private String description;
@JsonProperty("IsActive")
private int isActive;
@JsonProperty("Value")
private String value = null;
@JsonProperty("CreatedBy")
private String createdBy;
@JsonProperty("CreatedDate")
private String createdDate;
@JsonProperty("UpdatedBy")
private String updatedBy;
@JsonProperty("UpdatedDate")
private String updatedDate;
// standard getters and setters.    
}
```````````
I am also generating the XML out of this so you can ignore the annotations relevant to XML.

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

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

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

但这将是错误的做法,因为它会生成这样的 JSON,这不会是合法JSON.

{[{"x":"value"}, ...]}

如果只想更改 JSON 结构(不影响 xml(,则可以使用MixIn来实现此目的。

public interface JsonMixin {
@JsonValue
List<MyTestPojo> getMyTestPojoList();   
}

并将其注册到对象映射器并从主类中删除@JsonValue

objectMapper.addMixIn(GetResponseVO.class, JsonMixin.class);

最新更新