我正在尝试创建一个API,在我的控制器中返回一个游戏对象 如果逻辑成功运行,则返回游戏对象,如果逻辑失败,我需要以json字符串的形式返回错误消息:{error:“你丢失了”}。
我的问题是:我应该创建一个游戏类和错误类都实现的空接口,所以我可以在我的API中返回该接口类,还是有一种更简单的方法可以做到这一点?
基本上当游戏正在运行时我将返回游戏Obj,当游戏结束时我需要返回一个错误对象。
有什么想法吗?
控制器:
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public Game makeGuess(@RequestBody Guess guess){
return gameService.makeGuess(guess);
}
..服务类执行返回Game对象的一些业务逻辑
游戏类(JavaBean)
public class Game{
private String gameId;
@JsonIgnore
private String word;
private StringBuilder currentWord;
private String status;
private int incorrect;
public Game(String gameId, String word) {
this.status = "";
this.gameId = gameId;
this.word = word;
currentWord = new StringBuilder();
for(int i = 0; i <word.length();i++){
currentWord.append("_");
}
}
public Game(){}
public String getId() {
return gameId;
}
public void setId(String gameId) {
this.gameId = gameId;
}
public int getIncorrect() {
return incorrect;
}
public void setIncorrect(int incorrect) {
this.incorrect = incorrect;
}
public void incrementWrong(){
this.incorrect++;
}
public StringBuilder getCurrentWord() {
return currentWord;
}
public void setCurrentWord(StringBuilder initialWord) {
this.currentWord = initialWord;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
}
错误类(JavaBean)
package com.hangman.entity;
public class CustomError {
private String error;
public CustomError(String statusMessage) {
this.error = statusMessage;
}
public String getError() {
return error;
}
public void setError(String statusMessage) {
this.error = statusMessage;
}
}
答案 0 :(得分:2)
您可以从服务/控制器中抛出异常。使用ExceptionHandler
注释创建@ControllerAdvice
,它将捕获异常并返回错误对象,如下所示:
@ControllerAdvice
public class GameLostExceptionHandler {
@ExceptionHandler({GameLostException.class})
public ResponseEntity<CustomError> gameLostHandler(GameLostException e) {
return new ResponseEntity<>(new CustomError("Game lost"), HttpStatus.OK);
}
}