#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. Спасибо, чувак, отлично