繁体   English   中英

不要在Spring MVC 3中使用Jackson序列化子类型属性

[英]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可以在字段上声明,这样就不会影响UserExtendedUser序列化的常见行为。

public class Service {
  @JsonSerialize(as = User.class)
  private User user;
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM