@RestController相当于@Controller+@ResponseBody合在一起使用的效果。
@Controller注解:是spring框架提供的注解。使用@Controller注解标记的类是控制器类(控制层/表现层),这个控制层里面的方法可以去调用@Sercive标识的类(业务逻辑层),@Sercive标识的类可以继续调用使用@Resposity标记的接口实现类(Dao层/持久层)
MVC设计模式:M:模型层 V :视图层 C:控制层,M一般代表的是service和Dao; view一般代表的是页面如:jsp、html等;C代表控制器如springMVC中的controller等
MVC我们一般可以这样理解:JSP/HTML页面------控制器------数据逻辑处理------持久化
@Controller标记在一个类上面,还不能说这个类是springMVC的控制器,这个时候spring还不认识它,需要将这个控制器交给spring来管理。需要在applicationContext.xml文件里面配置如下 扫描器:
<context:component-scan base-package="com.baidu">
</context:component-scan>
这样配置后,上面的扫描器可以扫描“com.baidu”包和它子包下面所有带有@Component @Service @Controller @Resposity等组件,并把它们加到IOC容器中,由IOC容器管理。
@Controller标记在一个类上面,这个类就是一个SpringMVC的Controller类,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。
@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给出了外界访问方法的路径,或者说是触发路径
用@ReponseBody标记Controller类中的方法。把return的结果变成JSON对象返回。如果没有这个注解,这个方法只能返回要跳转的路径即HEML/JSP页面,有了这个注解,可以不跳转页面只返回JSON数据。
二、@RestController注解
@RestController也是Spring的注解,@RestController相当于@Controller+@ResponseBody合在一起使用的效果。
Controller类中的方法返回值默认是json对象,也就是相当于@Controller里面的方法上面添加了@ResponseBody,
@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;
}
}