Spring在创建后将JsonView应用于对象?

时间:2016-09-14 06:44:45

标签: java spring jackson

说我有一个对象用户:

@JsonView(User.Activity.class)
String name
@JsonView(User.Activity.class)
int id
String description;
// Realistically there will be a lot more fiels here...
... getters and setters

然后我离开并创造了一个:

User u = new User();
u.setName("xoxo");
u.setId(1);
u.setDescription("DESCRIPTION....");
dao.save(u);

return u.withJsonView(User.Activity.class); // Is there a way to apply this?

我想使用特定JsonView的字段将此对象返回给客户端。我怎么能这样做?

修改

Hashmap hm = new Hashmap();
MappingJacksonValue value = new MappingJacksonValue(user);
value.setSerializationView(User.Activity.class);
hm.put("success", value);

return ResponseEntity.ok(hm); // Returns whole user object :\

这就是我所做的一切。 最终成为整个用户对象,即使我只将User.activity.class视图放在几个字段上。我只是在 响应实体

中返回哈希地图

1 个答案:

答案 0 :(得分:1)

要应用视图,请在端点方法上使用@JsonView注释:

@GetMapping
@JsonView(User.Activity.class)
public User getUser() {
    User user = new User();
    return user;
}

要动态应用视图 ,请将您的POJO打包成MappingJacksonValue

@GetMapping
public MappingJacksonValue getUser(){
    User user = new User();
    MappingJacksonValue value = new MappingJacksonValue(user);
    value.setSerializationView(User.Activity.class);
    return value;
}

有关详细信息,请查看this post关于Spring在Spring中的集成。