Как правильно сделать обёртку @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);
}