自定义Json错误消息

时间:2018-03-23 15:52:38

标签: java json spring-boot error-handling interface

我正在尝试创建一个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;
}

}

1 个答案:

答案 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);
   }
}