簡體   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