如何从Rest Service返回错误消息

时间:2018-11-22 08:36:46

标签: spring rest spring-mvc spring-rest

我用Spring Boot定义了一个REST服务,该服务返回一个接口。当服务中发生错误时,如何返回有意义的错误消息?结果,在浏览器上,我显示MyInterface类型的Json。

下面的代码是控制器调用的服务:

public MyInterface getSomeTask() {

    // business logic here
    MyInterface myObject= getRelatedClass();

    if(myObject == null){
       // how to return error message 
    }

    return myObject;
 }

1 个答案:

答案 0 :(得分:-1)

一种可能性是抛出Exception,然后用Spring处理它,以便它返回正确的json。

您可能需要查看有关错误处理的this文章。

您可以创建自定义异常,该异常将被抛出逻辑中,然后对其进行处理:

if(myObject == null){
   throw new CouldNotGetRelatedClassException(); 
}

在控制器中,您可以使用以下错误处理方法:

public class FooController {

   @ExceptionHandler({ CouldNotGetRelatedClassException.class})
   public void handleException() {
       // logic of exception handling
   }

}

另一种方法可能是创建带有@ControllerAdvice注释的类,该类将对引发的异常创建自定义json响应:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

   @ExceptionHandler(value = {CouldNotGetRelatedClassException.class})
   protected ResponseEntity<Object> handleNotFound(
     RuntimeException ex, WebRequest request) {
       String bodyOfResponse = "This should be application specific";
       return handleExceptionInternal(ex, bodyOfResponse, 
         new HttpHeaders(), HttpStatus.NOT_FOUND, request);
   }
}

但是,您可能想知道错误响应的结构可能与普通对象不同,因此您可能希望使用不同的HTTP状态代码返回它,以便前端可以确定此消息将以不同的方式反序列化。