1

我正在使用带有这样的控制器的 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。

提前致谢

4

4 回答 4

0

我认为这可以解决问题:

@JsonSerialize(using=User.class)

请参阅此相关答案:https ://stackoverflow.com/a/13926740/1292605

于 2013-10-22T14:17:52.093 回答
0

@JsonIngore您可以使用注释轻松完成“我想要一个不返回 location 属性的 JSON”的声明:

public class ExtendedUser extends User {
    @JsonIgnore
    private Location location;
     ...
}

但是,这就是您要尝试做的事情,只是从响应中消除位置,还是返回的实际类型(类型 id)很重要?如果我不在基地,请发布您的预期 JSON 结果和您的实际 JSON 结果。

于 2013-10-22T13:37:00.410 回答
0

尝试@JsonInclude(Include.NON_NULL)扩展用户

于 2013-10-22T13:28:32.753 回答
0

我建议使用as@JsonSerialize 的属性。顺便说一句,@JsonSerialize 可以在字段上声明,这样它就不会影响Useror序列化的常见行为ExtendedUser

public class Service {
  @JsonSerialize(as = User.class)
  private User user;
  ...
}
于 2019-01-31T07:51:14.130 回答