Java 不要在Spring MVC 3中使用Jackson序列化子类型属性
我将Spring MVC与如下控制器一起使用:Java 不要在Spring MVC 3中使用Jackson序列化子类型属性,java,json,spring,spring-mvc,spring-annotations,Java,Json,Spring,Spring Mvc,Spring Annotations,我将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
@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类型的对象在应用程序中创建,并在服务中设置。当控制器/列表响应请求时,尽管服务类中的引用是User,但会序列化ExtendeDeduser类型的对象。我想知道注释是否有办法只序列化超类型(被引用的类型)并避免子类型
考虑到这个例子,我希望返回一个不带location属性的JSON
提前感谢使用@JsonIngore
注释可以轻松完成您关于“我想要一个不返回location属性的JSON”的声明:
public class ExtendedUser extends User {
@JsonIgnore
private Location location;
...
}
但是,这就是您试图做的,只是从响应中删除位置,还是返回的实际类型(类型id)很重要?如果我不正确,请发布您预期的JSON结果和实际的JSON结果。我认为这会起作用:
@JsonSerialize(using=User.class)
请参阅此相关答案:我建议将
用作@JsonSerialize的属性。顺便说一句,@JsonSerialize可以在字段上声明,这样它就不会影响User
或ExtendedUser
的常见序列化行为
public class Service {
@JsonSerialize(as = User.class)
private User user;
...
}
这只是一个例子。我不希望子类型属性包含在序列化中。其中一个是位置,但还有其他一些。您使用什么库来整理您的对象?我通过org.springframework.web.servlet.view.json使用jackson-mapper-asl-1.9.3