Как правильно сделать обёртку @Response entity и вынести общий маппинг (/api/admin) над классом рестконтроллера? Потребуются ли ещё изменения где-то?

@RestController
public class UserRestController {
    @Autowired
    private UserService userService;

    @Autowired
    private RoleService roleService;
    


    @GetMapping("/api/admin")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/api/user")
    public User getCurrentUser() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        return  userService.getUserByEmail(auth.getName());
    }

    @GetMapping("/api/user/{id}")
    public User getUser(@PathVariable int id) {
        return userService.getUserById(id);
    }


    @PostMapping("/api/admin")
    public void saveUser(User user, @RequestParam(name = "rolesNewUser", required = false) List<Integer> roles) {
        if (roles.size() > 0) {
            roles.forEach(roleIndex -> user.getRoles().add(roleService.getRoleById(roleIndex)));
        }
        userService.addUser(user);
    }


    @PatchMapping("/api/admin/updateUser/{id}")
    public ResponseEntity<?> updateUser(User user,
                                        @PathVariable int id,
                                        @RequestParam(name = "rolesEditUser", required = false) List<Integer> roles) {
        try {
            if (roles.size() > 0) {
                roles.forEach(roleIndex -> user.getRoles().add(roleService.getRoleById(roleIndex)));
            }
            userService.updateUser(id, user);
            return new ResponseEntity<>(HttpStatus.OK);
        } catch (NoSuchElementException e) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }


    @DeleteMapping("/api/admin/delete/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }

}

Ответы (1 шт):

Автор решения: Gleb Kuznetsov

Общий префикс для методов можно перенести в @RequestMapping на уровне класса:

@RestController
@RequestMapping("/api/admin")
public class UserRestController {
    ...
    @GetMapping("/")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @DeleteMapping("/delete/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }
→ Ссылка