исключение обратного броска в Котлине

#java #spring #kotlin

Вопрос:

У меня следующая проблема, я не могу вернуть это исключение. Он выдает ошибку 500 и не запускает это исключение. Я хотел бы, чтобы, когда я ввел if, он уже возвращал это пользовательское исключение.

КОТЛИН

     class CustomExceptionName(message: String) : Exception(message)
     
        @PostMapping
        fun createUsers(@RequestBody user: User): ResponseEntity<User> {
            var pattern = Regex("[^0-9]")
            var emailExist = false
            emailExist = this.userRepository.existsByEmail(user.email)
            if (emailExist) {
              throw CustomExceptionName("email exist")
            }
            user.telephone = pattern.replace(user.telephone, "")
            return ResponseEntity.ok(this.userRepository.save(user))
        }
 

Ява

       public class DomainException extends RuntimeException {
        private static final long serialVersionUID = 1L;

        public DomainException(String message) {
            super(message);
        }
    }

        @Override
        public Client create(Client client) {
            boolean clientExists = clientRepository.findByEmail(client.getEmail())
                    .stream()
                    .anyMatch(emailExists -> !emailExists.equals(client));
            boolean cnpjExists = clientRepository.findByCnpj(client.getCnpj())
                    .stream()
                    .anyMatch(emailExists -> !emailExists.equals(client));
            if(clientExists) {
                throw new DomainException("Já existe um cliente cadastrado com esse e-mail");
            }
            if(cnpjExists) {
                throw new DomainException("Já existe um cliente cadastrado com esse cnpj");
            }
            return clientRepository.save(client);
        }
 

Комментарии:

1. Вы имеете в виду, что это не исключение? Что заставляет вас думать, что это не исключение, если emailExist это правда?

2. Точно, на Почтальона возвращается только ошибка 500. Нет никаких пользовательских исключений

3. И что вы видите в журналах вашего приложения?

4. ответ почтальона «{ «метка времени»: «2021-10-01T14:50:33.918 00:00», «статус»: 500, «ошибка»: «Внутренняя ошибка сервера», «путь»: «/api/пользователи» }»

5. На консоли появится сообщение об ошибке. Но я хочу, чтобы ошибка возвращалась в запросе. Что ошибка появляется в Postman, поэтому, когда фронт запрашивает, у него появляется это сообщение об ошибке

Ответ №1:

Вам нужно использовать RestControllerAdvice или ControllerAdvice нравится

 @ControllerAdvice
class ControllerAdviceRequestError : ResponseEntityExceptionHandler() {

    @ExceptionHandler(value = [(CustomExceptionName::class)])
    fun handleCustomExceptionName(ex: CustomExceptionName,request: WebRequest): ResponseEntity<String> {
       
        return ResponseEntity(ex.getMessage(), HttpStatus.BAD_REQUEST)
    }
}
 

Комментарии:

1. Спасибо, чувак, отлично