Предположим, у нас есть приложение Весенний ботинок, которое управляет несколькими пользователями, задачами пользователя и друзьями пользователя. User может иметь несколько связанных Task, а также может иметь несколько Friend.
Spring Boot позволяет вводить текущего пользователя через определение аннотации @CurrentUser следующим образом:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@AuthenticationPrincipal
public @interface CurrentUser {
}
Следовательно, можно реализовать следующие методы контроллера REST API:
@...
public ResponseEntity<List<Task>> getTasks(@CurrentUser CustomUserDetails currentUser) {
List<Task> result = taskService.getTasksForUser(currentUser.getId()); // NOTE: taskService is @Autowired
return ResponseEntity.ok(result);
}
@...
public ResponseEntity<List<Task>> getSharedTasks(@CurrentUser CustomUserDetails currentUser) {
List<Friend> friends = friendService.getFriendsForUser(currentUser.getId());
List<Task> tasks = taskService.getTasksForUser(currentUser.getId());
List<Task> result = tasks.stream().filter(x -> x.isSharedWith(friends)).collect(Collectors.toList());
return ResponseEntity.ok(result);
}
Я хотел бы избавиться от явных обращений к реализациям Service или Repository для получения Task и Friend.
Я бы предпочел такие сигнатуры методов:
public ResponseEntity<List<Task>> getTasks(@CurrentUser CustomUserDetails currentUser,
@CurrentUserTasks List<Task> userTasks) { ... }
public ResponseEntity<List<Task>> getTasks(@CurrentUser CustomUserDetails currentUser,
@CurrentUserTasks List<Task> userTasks,
@CurrentUserFriends List<Friend> userFriends) { ... }
Кроме того, я хотел бы предоставить собственный метод, чтобы фактически определить, какие Task и Friend предоставляются данному пользователю, например:
public List<Friend> getFriendsForUser(CustomUserDetails user) { ... }
Предоставляет ли Spring Boot возможность вводить такие данные в метод REST API?
Я не могу найти аннотацию @CurrentUser при весенней загрузке.
@CurrentUser определен в OP.




Вы смотрели на Producer в сочетании с AnnotationLiterals? Я не работаю с Spring Boot, но думаю, что это возможно.