GVKun编程网logo

spring @Controller 和 @RestController 注解的区别(spring中controller和service注解)

37

想了解spring@Controller和@RestController注解的区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于spring中controller和service注解的相关

想了解spring @Controller 和 @RestController 注解的区别的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于spring中controller和service注解的相关问题,此外,我们还将为您介绍关于1.@Controller和@RestController的区别、@Controller 和 @RestController 区别是什么、@Controller、@RestController 注解区别详解、@Controller和@RestController有什么区别?的新知识。

本文目录一览:

spring @Controller 和 @RestController 注解的区别(spring中controller和service注解)

spring @Controller 和 @RestController 注解的区别(spring中controller和service注解)

@Controller弹簧和@RestController注释之间的区别。

注释可以@Controller同时用于 Web MVC 和 REST 应用程序吗?
如果是,我们如何区分它是 Web MVC 还是 REST 应用程序。

答案1

小编典典
  • @Controller用于将类标记为 Spring MVC Controller。
  • @RestController是一个方便的注解,它只是添加@Controller@ResponseBody注解(参见:Javadoc)

所以以下两个控制器定义应该做同样的事情

@Controller@ResponseBodypublic class MyController { }@RestControllerpublic class MyRestController { }

1.@Controller和@RestController的区别

1.@Controller和@RestController的区别

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
 
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
 
2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

@Controller 和 @RestController 区别是什么

@Controller 和 @RestController 区别是什么

@RestController 在 Spring MVC 中就是 @Controller 和 @ResponseBody 注解的集合。

@RestController 注解是从 Spring 4.0 版本开始添加进来的,主要用于更加方便的构建 RESTful Web 服务。

@ResponseBody

该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 Response 对象的 body 数据区。使用此注解此次请求将不再走视图处理器,而是直接将此响应结果写入到输入流中,其效果等同于使用 response 对象输出指定格式的数据。

在 RESTful 的服务中,我们大部分情况是使用 JSON 为返回数据的,所以你可以直接使用  @RestController 替换掉 @Controller 和 @ResponseBody。

根据上面的解释,下面的 2 段代码是完全一样的:

@Controller
@ResponseBody
public class MVCController { 
   .. your logic
}


@RestController
public class RestFulController { 
  .... your logic
}

 

https://www.cwiki.us/display/SpringBootZH/questions/57939042

@Controller、@RestController 注解区别详解

@Controller、@RestController 注解区别详解

@Controller、@RestController 注解区别:

@RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用。

一、@Controller 注解

@Controller 是 Spring 框架提供的注解。

@Controller 标识的类,该类代表控制器类 (控制层 / 表现层)。
这里控制层里面的每个方法,都可以去调用 @Service 标识的类(业务逻辑层),@Service 标识的类中的方法可以继续调用 @Resposity 标识的接口实现类(Dao 层 / 持久层)。

【MVC 设计模式:M (model) 指模型,V (view) 指视图层,C (controller) 指控制层。
M 代表模型一般指 service 和 DAO;view 代表视图一般指页面 eg:jsp,html ftl 等;C 代表控制器,比如 springMVC 中的 controller 或 struts2 中的 action 。
MVC 其实我们正常理解应该是 VMC:JSP/HTML 页面数据–> 控制器–> 数据逻辑处理并持久化。
但官方是 MVC,所以我们按照 MVC 这么记住就对了。

@Controller 标记在一个类上还不能真正意义上说它就是 SpringMVC 的控制器,应为这个时候 Spring 还不认识它,这个时候需要把这个控制器交给 Spring 来管理。用下面方式管理:

在 applicationContext.xml 文件里面配置如下 扫描器

?
1
2
< context:component-scan base-package = "com.baidu" >
</ context:component-scan >

上面的扫描器可以扫描 "com.baidu" 包和它子包下面的所有带有 @Component、@Controller、@Service、@Resposity 等组件,并把他们添加到 IOC 容器中,由 IOC 容器管理。

@Controller 用于标记在一个类上,使用它标记的类就是一个 SpringMVC 的 Controller 类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了 @RequestMapping 注解。

@Controller 只是定义了一个控制器类,而使用 @RequestMapping 注解的方法才是处理请求的处理器。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Controller
public class HospitalController {
  //注入Service服务对象
  @Autowired
  private HospitalService hospitalService;
 
 
  @RequestMapping (method = RequestMethod.POST, value = "/findAllHospital" )
  @ResponseBody
  public Map findAllHospital( final HttpServletRequest request ,
  @RequestBody Map parmMap , HttpServletResponse response){
  
   Map map=parmMap ; //@RequestBody注解原因,系统会自动把request数据变成parmMap
   ........
   ........
   return map;
   
  }
  
  }

用 @Controller 定义一个控制器类,

用 @RequestMapping 给出外界访问方法的路径,或者说触发路径 ,触发条件。

用 @ResponseBody 标记 Controller 类中的方法。把 return 的结果变成 JSON 对象返回。(如果没有这个注解,这个方法只能返回要跳转的路径即跳转的 html/JSP 页面。有这个注解,可以不跳转页面,只返回 JSON 数据)

二、@RestController 注解

@RestController 也是 Spring 框架提供的注解。(Spring4.0 之后新增的)

@RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用。

Controller 类中的方法返回值,默认是 json 对象,也就是相当于 @Controller 里面的方法上添加了 @ResponseBody
如果方法返回值,需要跳转,那么方法的返回类型必须是 View 或者 ModelAndView.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@RestController
public class HospitalController {
  //注入Service服务对象
  @Autowired
  private HospitalService hospitalService;
 
 
  @RequestMapping (method = RequestMethod.POST, value = "/findAllHospital" )
  //方法上面可以不需要@ResponseBody注解,因为类上面用的是@RestController注解
  public Map findAllHospital( final HttpServletRequest request ,
  @RequestBody Map parmMap , HttpServletResponse response){
  
   Map map=parmMap ; //@RequestBody注解原因,系统会自动把request数据变成parmMap
   ........
   ........
   return map;
   
  }
  
  }

@Controller和@RestController有什么区别?

@Controller和@RestController有什么区别?

首先说一下这两个注解的作用:

1、使用@Controller 注解在对应的方法上,视图解析器可以解析return 的jsp、html页面,并且跳转到相应页面(注解到类)

2、使用@ResponseBody注解,则返回的是json(或者是你定义的String、Map类型)内容(注解到方法)

 

明白了吧?就是说如果你要解析页面,用@Controller,如果你使用的Ajax获取一些数据,则使用@ResponseBody注解到方法上。

而@RestController就是@Controller 和 @ResponseBody 的合体。

 

我们今天的关于spring @Controller 和 @RestController 注解的区别spring中controller和service注解的分享已经告一段落,感谢您的关注,如果您想了解更多关于1.@Controller和@RestController的区别、@Controller 和 @RestController 区别是什么、@Controller、@RestController 注解区别详解、@Controller和@RestController有什么区别?的相关信息,请在本站查询。

本文标签: