[英]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.