Spring 5 ввел ResponseStatusException, это хорошая практика, чтобы выбрасывать это исключение непосредственно из сервисного уровня.
Случай 1:
@Service
public class UserService {
public User findUserByName(String username) {
User user = userRepository.findByUsernName(username);
if(null == user) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "user not found");
}
}
}
Случай 2: Или нам нужно использовать пользовательское исключение и обрабатывать его на уровне контроллера? В этом случае мы перехватываем CustomException и генерируем ResponseStatusException, почему мы должны перехватить пользовательское исключение снова вместо того, чтобы идти с Case 1
@Service
public class UserService {
public User findUserByName(String username) {
User user = userRepository.findByUsernName(username);
if(null == user) {
throw new UserNotFoundException("user not found");
}
}
}
@RestController
public class UserController {
@GetMapping(path="/get-user")
public ResponseEntity<User> getUser(String username) {
try {
userService.findUserByName(username);
} catch (UserNotFoundException ex) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "user not found");
}
}
}