Java 从Spring中捕获异常时遇到问题
我正在制作一个国际象棋游戏,它是我在春天制作的,然后连接到React。我在Spring中有一些自定义异常,它们在后端可以完美地工作,但我不知道如何在前端捕获自定义消息 我可以使用邮递员与程序进行移动,如果这是非法移动,我将收到此消息-Java 从Spring中捕获异常时遇到问题,java,reactjs,spring,spring-boot,exception,Java,Reactjs,Spring,Spring Boot,Exception,我正在制作一个国际象棋游戏,它是我在春天制作的,然后连接到React。我在Spring中有一些自定义异常,它们在后端可以完美地工作,但我不知道如何在前端捕获自定义消息 我可以使用邮递员与程序进行移动,如果这是非法移动,我将收到此消息- 状态代码:417期望失败消息:对于uri=/game的棋子,这不是合法的移动;客户端=127.0.0.1 然而,在React中,我得到的唯一消息(除了来自xhr.js:178的消息)是- 请求失败,状态代码为417 我试图遵循这里和这里的建议,因为我的响应不是JS
状态代码:417期望失败消息:对于uri=/game的棋子,这不是合法的移动;客户端=127.0.0.1
然而,在React中,我得到的唯一消息(除了来自xhr.js:178的消息)是-
请求失败,状态代码为417
我试图遵循这里和这里的建议,因为我的响应不是JSON格式(尽管我认为@ResponseBody应该将其转换为JSON),但在尝试遵循公认的答案之后,它只导致了一个没有解决的错误,React说它失败了,状态代码为500,所以我显然遗漏了一些东西
这是我最初的CustomerExceptionsHandler-
package com.chess.exceptions;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public class CustomExceptionsHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = InvalidMoveException.class)
@ResponseBody
protected ResponseEntity<Object> resolveInvalidMove(InvalidMoveException e, WebRequest req){
ErrorResponse errorResponse = new ErrorResponse(HttpStatus.EXPECTATION_FAILED.value(),
HttpStatus.EXPECTATION_FAILED.getReasonPhrase(),
e.getMessage(),
req.getDescription(true));
return handleExceptionInternal(e, errorResponse.toString(), new HttpHeaders(), HttpStatus.EXPECTATION_FAILED, req);
}
ErrorResponse.java
package com.chess.exceptions;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "error")
public class ErrorResponse {
private int status;
private String errReason;
private String errMessage;
private String path;
public ErrorResponse(int status, String errReason, String errMessage, String path) {
this.status = status;
this.errReason = errReason;
this.errMessage = errMessage;
this.path = path;
}
//2nd constructor added for ATTEMPT 1
public ErrorResponse(int status, String errMessage){
this.status = status;
this.errMessage = errMessage;
}
@Override
public String toString(){
return "Status Code: " + status + " " + errReason + " Message: " + errMessage + " at " + path;
}
}
下面是React的相关代码-
Board.js
DataService.js
makeMove(move){
return axios.post(`${url}`, move);
}
任何帮助都将不胜感激
DataService.makeMove(move)
.then(res => {
//console.log(res.data);
setIsWhite((prev) => !prev);
props.setTheBoard(res.data);
setStatus(res.data[64]);
updateMovesList();
})
.catch(err => {
console.log(err)
console.log(err.message)
})
makeMove(move){
return axios.post(`${url}`, move);
}