我正在使用 Spring MVC 和这样的控制器:
@RequestMapping(value = "/list", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody List<Service> list() {
return services.list();
}
模型是这样的:
public class Service {
private User user;
...
}
public class User {
private String name;
...
}
public class ExtendedUser extends User {
private Location location;
...
}
当然,在应用程序中创建了一个 ExtendedUser 类型的对象,并在 Service 中设置。当控制器 /list 应答请求时,尽管 Service 类中的引用是 User,但仍会序列化 ExtendedUser 类型的对象。我想知道是否有某种方法可以使用注释来仅序列化超类型(引用的类型)并避免子类型属性。
考虑到示例,我想要返回一个不带位置属性的 JSON。
提前致谢
我建议使用@JsonSerialize的
as
属性。顺便说一句,@JsonSerialize 可以在字段上声明,这样就不会影响 User
或 ExtendedUser
序列化的常见行为。
public class Service {
@JsonSerialize(as = User.class)
private User user;
...
}
在
@JsonInclude(Include.NON_NULL)
上尝试 ExtendedUser
。
您的“我想要一个不返回位置属性的 JSON”声明可以使用
@JsonIgnore
注释轻松完成:
public class ExtendedUser extends User {
@JsonIgnore
private Location location;
...
}
这就是您想要做的,只是从响应中删除位置,还是返回的实际类型(类型 id)很重要?如果我的说法不对,请发布您预期的 JSON 结果和实际的 JSON 结果。