Ожидание пользовательского исключения в ответе json вместо внутренней ошибки сервера при весенней загрузкеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ожидание пользовательского исключения в ответе json вместо внутренней ошибки сервера при весенней загрузке

Сообщение Anonymous »

Я пишу собственное исключение, где, если имя пользователя уже существует, ответом будет пользовательское исключение, т. е. UserException в json.
UsernameAlreadyExistException.java сильный>
package com.crawler.exception;

public class UsernameAlreadyExistException extends RuntimeException {
public UsernameAlreadyExistException(String message) {
super(message);
}
public UsernameAlreadyExistException(String message, Throwable cause) {
super(message, cause);
}
}

UserException.java

package com.crawler.exception;

import org.springframework.http.HttpStatus;

public class UserException {
private final String message;
private final Throwable throwable;
private final HttpStatus httpStatus;

public UserException(String message, Throwable throwable, HttpStatus httpStatus) {
this.message = message;
this.throwable = throwable;
this.httpStatus = httpStatus;
}

public String getMessage() {
return message;
}

public Throwable getThrowable() {
return throwable;
}

public HttpStatus getHttpStatus() {
return httpStatus;
}
}

UserExceptionHandler
package com.crawler.exception;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class UserExceptionHandler {

@ExceptionHandler(value = {UsernameAlreadyExistException.class})
public ResponseEntity handleUsernameAlreadyExistException(UsernameAlreadyExistException usernameAlreadyExistException) {
UserException userException = new UserException(
usernameAlreadyExistException.getMessage(),
usernameAlreadyExistException.getCause(),
HttpStatus.CONFLICT
);
return new ResponseEntity(userException, HttpStatus.CONFLICT);
}
}

В реализации службы я написал код, вызывающий исключение UsernameAlreadyExistException.
UserServiceImplementation.java
@Override
public String createUser(User user) {
if (userRepository.findByUsername(user.getUsername()) != null) {
throw new UsernameAlreadyExistException("Username already exist.");
}
userRepository.save(user);
return "User created successfully.";
}

Это вывод консоли.
2024-09-24T13:41:43.809Z ERROR 1 --- [backend] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: com.crawler.exception.UsernameAlreadyExistException: Username already exist.] with root cause

Ответ от POSTMAN.
{
"timestamp": "2024-09-24T13:41:43.878+00:00",
"status": 500,
"error": "Internal Server Error",
"path": "/api/v1/users"
}

Ожидается ответ от POSTMAN.
{
"message": "Username already exist",
"throwable": null,
"httpStatus": "CONFLICT"
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... er-error-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»