[英]Do not serialize subtype properties with Jackson in Spring MVC 3
我将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的对象,并在“服务”中进行了设置。 当控制器/ list回答请求时,尽管Service类中的引用为User,但类型为ExtendedUser的对象也会被序列化。 我想知道是否有某种注释方法可以只序列化超类型(引用的类型)并避免子类型的属性。
考虑到该示例,我希望返回不带location属性的JSON。
提前致谢
在ExtendedUser上尝试@JsonInclude(Include.NON_NULL)
您可以使用@JsonIngore
批注轻松地完成“我想返回不带location属性的JSON”声明:
public class ExtendedUser extends User {
@JsonIgnore
private Location location;
...
}
但是,这是您要尝试做的只是从响应中消除位置,还是返回的实际类型(类型ID)重要吗? 如果我不满意,请发布您的预期JSON结果和实际的JSON结果。
我认为这可以解决问题:
@JsonSerialize(using=User.class)
看到这个相关的答案: https : //stackoverflow.com/a/13926740/1292605
我建议将其as
@JsonSerialize的属性。 顺便说一句,@ JsonSerialize可以在字段上声明,这样就不会影响User
或ExtendedUser
序列化的常见行为。
public class Service {
@JsonSerialize(as = User.class)
private User user;
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.