简体   繁体   中英

RestControllerAdvice did not show custom exception in postman

I created a custom exception hanle in a separate module and wanted to use the same GlobalExceptionHandle class in another module. Although an exception appears on the console, but no custom exception appears on the postman. What could be the reason for this? pls help me

GlobalExceptionHandle.java

@RestControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class GlobalExceptionHandle extends ResponseEntityExceptionHandler {

    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity<CustomExceptionResponseDto> handle(NotFoundException exception) {
        return new ResponseEntity<CustomExceptionResponseDto>(
                CustomExceptionResponseDto.builder()
                        .errorCode(HttpStatus.NOT_FOUND)
                        .message(exception.getMessage())
                        .status(HttpStatus.NOT_FOUND.value())
                        .timestamp(LocalDateTime.now())
                        .build(), HttpStatus.NOT_FOUND
        );
    }

    @ExceptionHandler(InvalidStateException.class)
    public ResponseEntity<CustomExceptionResponseDto> handle(InvalidStateException exception) {
        return new ResponseEntity<CustomExceptionResponseDto>(
                CustomExceptionResponseDto.builder()
                        .errorCode(HttpStatus.BAD_REQUEST)
                        .message(exception.getMessage())
                        .status(HttpStatus.BAD_REQUEST.value())
                        .timestamp(LocalDateTime.now())
                        .build(), HttpStatus.BAD_REQUEST
        );
    }
}

UserController.java

@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @PostMapping
    public ResponseEntity<UserResponseDto> save(@RequestBody UserRequestDto userRequestDto) {
        return ResponseEntity.ok(userService.save(userRequestDto));
    }
}

UserServiceImpl.java

@Service
@RequiredArgsConstructor
@Slf4j
public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;
    private final UserMapper userMapper;
    private final BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override
    public UserResponseDto save(UserRequestDto userRequestDto) {
        log.info("User request dto: " + userRequestDto);

        userRepository.findUserByEmail(userRequestDto.getEmail()).ifPresent((user) -> {
            throw new EmailAlreadyUseException(user.getEmail());
        });

        var user = userMapper.userRequestDtoToUser(userRequestDto);
        user.setPassword(bCryptPasswordEncoder.encode(userRequestDto.getPassword()));
        return userMapper.userToUserResponseDto(userRepository.save(user));
    }

}

InvalidStateException.java

public class InvalidStateException extends RuntimeException {

    private static final long serialVersionUID = 1L;

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

EmailAlreadyUseException.java

public class EmailAlreadyUseException extends InvalidStateException {
    public EmailAlreadyUseException(String email) {
        super(email+" already registered,try different email");
    }
}

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

I see you're throwing throw new EmailAlreadyUseException(user.getEmail()); but you handle @ExceptionHandler(InvalidStateException.class) try to change into @ExceptionHandler(EmailAlreadyUseException.class) and check it out.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM