Можем ли мы напрямую генерировать ResponseStatusException из сервисного уровня, не выбрасывая пользовательское исключение и обработку на уровне контроллера? - PullRequest
0 голосов
/ 07 января 2020

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");
      }
    }
}

1 Ответ

0 голосов
/ 07 января 2020

Как уже упоминалось в комментариях, вы можете создать отображение в вашей ошибке. Тогда вам не нужно использовать блок try в контроллере.

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "user not found")
public class UserNotFoundException extends RuntimeException {

    public UserNotFoundException(String message) {

        super(message);
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...