restcontroller和controller区别

restcontroller和controller区别

@RestController和@Controller注解

RestController的作用相当于Controller加ResponseBody共同作用的结果,但采用RestController请求方式一般会采用Restful风格的形式。

Controller的作用:声明该类是Controller层的Bean,将该类声明进入Spring容器中进行管理

ResponseBody的作用:表明该类的所有方法的返回值都直接进行提交而不经过视图解析器,且返回值的数据自动封装为json的数据格式

RestController的作用:包含上面两个的作用,且支持Restful风格的数据提交方式

@RestController源码如下。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented@Controller
@ResponseBodypublic @interface RestController {  
    /**    * The value may indicate a suggestion for a logical component name,    * to be turned into a Spring bean in case of an autodetected component.    * @return the suggested component name, if any    * @since 4.0.1    */   
    String value() default "";
}

​ @RestController的编写方式依赖注解组合,@RestController被@Controller和@ResponseBody标注,表示@RestController具有两者的注解语义,因此在注解处理时@RestController比@Controller多具有一个@ResponseBody语义,这就是@RestController和@Controller的区别,也是@RestController的返回值为何都是经过转换的json的原因。

@ResponseBody注解的处理过程

​ 既然知道@RestController与@Controller的区别是多了一个@ResponseBody语义,我们不妨了解一下@ResponseBody的处理过程。

首先,可以知道,@ResponseBody是一个针对方法返回值进行处理的注解。如果熟悉Spring MVC处理过程的话,可以知道在根据requesturl映射获取到HandlerMethod之后,根据HandlerMethod调度请求方法的对象是HandlerAdapter,方法调用结束,返回值处理的调度对象也是HandlerAdapter。所以,@ResponseBody注解的处理应该也是在HandlerAdapter中完成。

Restful风格:

get:获取数据时用的请求方式

post:更新数据时的请求方式

put:增加数据时的请求方式

delete:删除数据时的请求方式

查考文档:https://blog.csdn.net/uuqaz/article/details/123919771

原文地址:https://www.cnblogs.com/JayZzzWh/archive/2022/08/19/16601790.html