@RestControllerAdvice vs @ControllerAdvice

Om.*_*Om. 10 spring

  • @RestControllerAdvice和@ControllerAdvice之间的主要区别是什么?
  • 是不是我们应该总是使用@RestControllerAdvice来提供休息服务和@ControllerAdvice MVC?

dev*_*per 16

@RestControllerAdvice只是@ControllerAdvice+ 的语法糖@ResponseBody,你可以看看这里.

是不是我们应该总是使用@RestControllerAdvice来提供休息服务和@ControllerAdvice MVC?

同样,如上所述,@ControllerAdvice甚至可以用于REST Web服务,但您还需要另外使用@ResponseBody.

  • 你能给我们举个例子吗? (3认同)

Edd*_*nne 6

In addition, we can just understand it as:

@RestControler= @Controller+@ResponseBody

@RestControllerAdvice= @ControllerAdvice+ @ResponseBody

请记住,@RestControllerAdvice使用 RestfulApi 处理异常是更方便的注释。

示例操作系统用法:

@RestControllerAdvice
public class WebRestControllerAdvice {
  
  @ExceptionHandler(CustomNotFoundException.class)
  public ResponseMsg handleNotFoundException(CustomNotFoundException ex) {
    ResponseMsg responseMsg = new ResponseMsg(ex.getMessage());
    return responseMsg;
  }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,任何异常 instanceOf CustomNotFoundException 都将在响应正文中抛出。

此处提取的示例:https : //grokonez.com/spring-framework/spring-mvc/use-restcontrolleradvice-new-features-spring-framework-4-3


Pra*_*ato 5

异常:一个好的 REST API 应该正确处理异常并向用户发送正确的响应。不应向用户呈现任何未处理的异常。REST API 开发人员有两个与错误处理相关的要求。

  1. 错误处理的常见位置
  2. 跨 API 具有正确 HTTP 状态代码的类似错误响应正文

@RestControllerAdvice是@ControllerAdvice和@ResponseBody的组合

@ControllerAdvice 注解在 Spring 3.2 中首次引入。

我们可以使用@ControllerAdvice注解来处理RESTful服务中的异常,但我们需要单独添加@ResponseBody

注意:
GlobalExceptionHandler 使用 @ControllerAdvice 进行注释,因此它将拦截来自应用程序中控制器的异常。


Lov*_*uri 5

@RestControllerAdvice 和 @ControllerAdvice 之间的区别是:

@RestControllerAdvice= @ControllerAdvice+ @ResponseBody- 我们可以在REST Web 服务中使用。

@ControllerAdvice- 我们可以在MVCRest Web服务中使用,如果我们在Rest Web服务中使用它,需要提供ResponseBody。

例如 :

异常类:

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends Exception{

    private static final long serialVersionUID = 1L;
    public ResourceNotFoundException(String message){
        super(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

Rest Web Service 中上述异常的用法。

 @RestControllerAdvice
 public class MyRestControllerAdviceHandler {
     
 @ExceptionHandler(ResourceNotFoundException.class)
      public ResponseMsg resourceNotFoundException(ResourceNotFoundException ex) {
        ResponseMsg resMsg = new ResponseMsg(ex.getMessage());
        return resMsg;
      }
    
}
Run Code Online (Sandbox Code Playgroud)

MVC 中上述异常的用法。

@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<?> resourceNotFoundException(ResourceNotFoundException ex) {
        return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
    }
}
Run Code Online (Sandbox Code Playgroud)