0

で注釈が付けられたコントローラーメソッドがあり@JsonViewます。現在の要件は、指定されたパラメーターが認証されたユーザーと一致するJsonView場合、この同じメソッドが別のメソッドを使用して応答を返すようにすることです。userId応答タイプをそのままにして、またはソート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

春のデフォルト 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 に答える