运行时的java部分JSON序列化(用于RESTful查询)
我正在尝试在Tomcat中将Java对象转换为JSON(目前正在使用Jackson)。基于RESTful请求中的字段,我只想序列化这些字段。我希望支持对字段的任何子集的请求,所以我希望在运行时(动态地)这样做
例如,假设我想支持用户对象的部分序列化:
class User {
private final String id;
private final String firstName;
private final String lastName;
public User(String id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public String getId() { return id; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
}
如果我提出以下要求:
GET /users/{id}/?fields=firstName,lastName
我想得到类似{"firstName":"Jack","lastName":"Johnson"}
的东西
如果我提出以下要求:
GET /users/{id}/?fields=firstName
我想得到类似{"firstName":"Jack"}
的东西
Jackson的JSON View提供了定义逻辑属性子集(通过getter或字段访问的内容)以进行序列化的能力。但是,它们是静态定义的(使用注释),并且仅动态选择(每个序列化)。实际上,我希望支持请求对象字段的任何子集,因此我可能有数千个JSON视图(10个字段意味着1023个子集!)
哪个JSON库在运行时支持部分序列化
# 1 楼答案
从春季4.2.0开始。发布时,您可以完全控制要返回的字段,也可以使用以下链接中讨论的JSonfilter来执行此操作: 1.https://jira.spring.io/browse/SPR-12586 2.http://wiki.fasterxml.com/JacksonFeatureJsonFilter
# 2 楼答案
我们使用Google GSON在Java对象和JSON之间来回转换。我不确定它是否有你想要的功能,但它很容易使用,文档也很好
如果您找不到满足您需要的库,我建议您使用更松散的结构化类(如HashMap)或自定义表示类作为代码和JSON之间的链接。这会增加一两层,但会降低复杂性。祝你好运