[英]ControllerAdvice cannot catch custom exception in Spring Boot
[英]Cannot catch the exception through @ControllerAdvice and @ExceptionHandler in CRUD application
我正在嘗試創建自定義異常處理程序,但它沒有捕獲我的異常(UserAlreadyExistsException;UserNotFoundException 運行良好)。 我讀了另一個問題,但這些建議並沒有幫助我。 我的 controller 建議 class 如下:
@RestControllerAdvice
public class UserExceptionHandler extends ResponseEntityExceptionHandler {
private ResponseEntity<ErrorDTO> handleCommonHelper(final Exception exception, final HttpStatus status) {
final var errorDto = new ErrorDTO();
errorDto.setCode(String.valueOf(status.value()));
errorDto.setErrorDetails(exception.getMessage());
return new ResponseEntity<>(errorDto, status);
}
@ExceptionHandler(value = {UserNotFoundException.class})
public ResponseEntity<ErrorDTO> handleUserNameNotFoundConflict(final UserNotFoundException e) {
return this.handleCommonHelper(e, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(value = {UserAlreadyExistsException.class})
public ResponseEntity<ErrorDTO> handleUserNameExistsConflict(final UserAlreadyExistsException e) {
return this.handleCommonHelper(e, HttpStatus.CONFLICT);
}
}
我的create
方法如下所示:
@Override
public UserDTO createUser(UserDTO userDTO) {
var databaseUser = userRepository.existsById(Long.valueOf(userDTO.getUsername()));
if (databaseUser) {
throw new UserAlreadyExistsException("User with this username already exists!");
}
userDTO.setId(null);
var userEntity = mapToUserEntity(userDTO);
return mapToUserDTO(userRepository.save(userEntity));
}
還有我的 controller:
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "Created")
@ApiResponse(responseCode = "400", description = "Client error"),
@ApiResponse(responseCode = "500", description = "Server error")
})
@Operation(summary = "Creation of user", description = "Creation of user")
@PostMapping("/users")
public ResponseEntity<UserDTO> createUser(@RequestBody UserDTO userDTO) {
var createdUser = userService.createUser(userDTO);
return new ResponseEntity<>(createdUser, HttpStatus.CREATED);
}
好吧,現在我可以用相同的用戶名創建多個用戶並獲得 201 代碼。 你能給我一些建議嗎——我怎樣才能捕捉到這個異常?
看起來邏輯上有錯誤:在我看來, databaseUser
始終為 false。
var databaseUser = userRepository.existsById(Long.valueOf(userDTO.getUsername()));
if (databaseUser) {
您嘗試通過 ID 從數據庫中獲取用戶,但您使用的是用戶名。 看起來應該是這樣的:
var databaseUser = userRepository.existsByUsername(userDTO.getUsername());
您必須通過用戶字段的唯一性來檢查用戶是否存在(如果您的系統用戶名是唯一的,則必須通過用戶名進行檢查)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.