【发布时间】:2014-11-28 12:30:50
【问题描述】:
当您使用 Jackson 的 writerWithView 时,任何没有 @JsonView 注释的属性仍会被序列化。然而,在 Spring MVC 操作上使用 @JsonView 似乎需要 @JsonView 出现在每个属性上。
如果说我们有以下模型:
public class User {
private String username;
private String emailAddress;
public String getUsername() { return username; }
@JsonView(DetailView.class)
public String getEmailAddress() { return emailAddress; }
}
并且DetailView 扩展了BasicView,当我使用基本视图进行序列化时,我希望username 被序列化。这就是我们使用writerWithView时发生的情况:
@RequestMapping(value = "/me", method = GET)
@ResponseBody
public String getMe() throws JsonProcessingException {
User user = getCurrentUser();
return objectMapper.writerWithView(BasicView.class).writeValueAsString(user);
}
但是,从 Spring MVC 4.1 开始,我们可以改为执行以下操作:
@RequestMapping(value = "/me", method = GET)
@ResponseBody
@JsonView(BasicView.class)
public User getMe() throws JsonProcessingException {
return getCurrentUser();
}
后者导致响应为{} 而不是{username:"David"}。如果我们将@JsonView(BasicView.class) 添加到getUsername() 上,这将按预期工作。
显然,我们可以使用前者或将@JsonView 添加到所有内容中,这两者都更冗长且容易出错。
这看起来有点像MapperFeature.DEFAULT_VIEW_INCLUSION 已被关闭,但显式启用它似乎并没有奏效。
有没有办法解决这个问题?
【问题讨论】:
标签: json spring-mvc jackson