如何从反应中捕获自定义 java8 异常?

How to catch custom java8 exception from react?

以下代码生成 UserAlreadyExist 异常。

Optional<User> userCheck = userRepository.findByUsername(createRequest.getUsername());
    if(StringUtils.hasText(userCheck.get().getUsername())){
        String errorMessage = "User already exist: "+ userCheck.get().getUsername();
        throw new UserAlreadyExistException(errorMessage);
    }

当我尝试使用这些代码从我的 React 应用程序获取错误消息时,我只收到内部服务器错误消息。我的 header 包含 header 令牌和 application/JSON header.

export const createUserService = (data) => {
return new Promise(((resolve, reject) => {
    axios.post(USERS_BASE, data, getHeaderWithToken())
        .then(function (response) {
            resolve(response);
        })
        .catch(error=>{
        console.log(error)//returns "Internal Server Error" message
        console.log(error.response) // returns object with empty message field and other parameters.
            reject(error)
    })
}));

};

我怎样才能收到我发送的错误信息

String errorMessage = "User already exist: "+ userCheck.get().getUsername();
        throw new UserAlreadyExistException(errorMessage);
    

这是我的 UserAlreadyExistException class 顺便说一句。

public class UserAlreadyExistException extends RuntimeException {
public UserAlreadyExistException(String message) {
    super(message);
    
}}

您可以 return 使用 @RestControllerAdvice 为您抛出的自定义异常自定义响应。 请检查下面的示例。

 @RestControllerAdvice
    public class ControllerExceptionHandler {
      
  @ExceptionHandler(value = {UserAlreadyExistException.class})
  @ResponseStatus(value = HttpStatus.BAD_REQUEST)
  public ErrorMessage userAlreadyExistException(UserAlreadyExistException ex, WebRequest request) {
    ErrorMessage message = new ErrorMessage(
        status,
        date,
        ex.getMessage(),
        description);
    
    return message;
  }
}

您会更容易看到 Frontent 应用程序中的错误,并且您会像这样 return 响应。