@Controller、@RestController注解区别详解
@Controller、@RestController注解区别:
@RestController 注解相当于 @Controller + @ResponseBody 合在⼀起的作⽤。
⼀、@Controller注解
@Controller 是Spring框架提供的注解。
@Controller标识的类,该类代表控制器类(控制层/表现层)。
resource和autowired注解的区别这⾥控制层⾥⾯的每个⽅法,都可以去调⽤@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来管理。⽤下⾯⽅式管理:
在l⽂件⾥⾯配置如下扫描器
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⾥⾯的⽅法上添加了@Res
ponseBody 如果⽅法返回值,需要跳转,那么⽅法的返回类型必须是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;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论