解释一
我们一般都会在Controller上加上@Controller注解,但是有时候也见有加上@RestController
区别:
@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。
@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。
@RestController相当于@ResponseBody + @Controller
2、补充
@RestController中的方法如果想跳转页面,则用ModelAndView进行封装,如下:
@RestController
public class UserController {
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String toIndex(){
ModelAndView mv = new ModelAndView("index");
return mv;
}
}
解释二
@RestController = @ResponseBody + @Controller
单独使用@Controller,会返回一个页面
@RestController只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中
@ResponseBody 注解的作用是将 Controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到HTTP 响应(Response)对象的 body 中,通常用来返回 JSON 或者 XML 数据,返回 JSON 数据的情况比较多
最初学Spring MCV时候创建Controller
编写一个Java控制类:com.yao.controller.HelloController,注意编码规范
@Controller是为了让Spring IOC容器初始化时自动扫描到;
@RequestMapping是为了映射请求路径
package com.yao.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping("/h")
public String sayhello(Model model){
// 封装数据,向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","Hello,SpringMVCAnnotation");
// 会被视图解析器处理,相当于WEB-INF/jsp/hello
return "hello";
}
}
学SpringBoot时
package com.yao.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return"hello world !";
}
}
package com.yao.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/hello")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello(){
return"hello world !";
}
}
GetMapping 注解已经默认封装了@RequestMapping(method = RequestMethod.GET)
@RequestMapping(path = "/{city_id}/{user_id}",method = RequestMethod.GET) 更方便

本文详细介绍了SpringMVC和SpringBoot中的控制器概念,对比了@Controller与@RestController的区别及应用场景,解释了如何通过不同注解实现页面跳转或数据响应。
776

被折叠的 条评论
为什么被折叠?



