0

我有一个用@JsonView. JsonView当前的要求是,如果userId给定的 in 参数与经过身份验证的用户匹配,则使用不同的方法返回响应。知道响应类型应该保留ResponseEntity<MyObject>而不应该更改为MappingJacksonValue或排序,如何实现这一点。

我正在使用 Spring,所以也许一种方法是JacksonMapper注入默认值并SerializationView根据方法中的条件更改它。但这里的问题是,注入什么以及如何实现这一目标?

// Some controller annotations
@JsonView(Views.Public.class)
public static ResponseEntity<User> getUser(@PathVariable String userId)
    User user = userService.getUser(userId);
    User authenticated = userService.getAuthenticatedUser();
    if (userId.equals(authenticated.getId())) {
       // Change the view class to Views.Restricted.class
    }
    return new ResponseEntity<>(user, HttpStatus.OK);
}
4

1 回答 1

0

通过注入 spring 默认 ObjectMapper 并使用适当的 View 类更改其配置来解决它:

@Autowired
private ObjectMapper defaultMapper;
//...
public static ResponseEntity<User> getUser(@PathVariable String userId)
   User user = userService.getUser(userId);
   User authenticated = userService.getAuthenticatedUser();
   if (userId.equals(authenticated.getId())) {
      defaultMapper.setConfig(defaultMapper.getSerializationConfig().withView(Views.Restricted.class));
   } else {
      defaultMapper.setConfig(defaultMapper.getSerializationConfig().withView(Views.Public.class));
   }
   return new ResponseEntity<>(user, HttpStatus.OK);
}
于 2021-06-10T15:26:57.950 回答