需求场景
- 例如我想返回一个视图名来进行页面跳转
- 我想向页面输出数据不跳转页面
- 我想向页面输出json数据
场景1
@Controller
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/userLogin")
public String userLogin(@Param("userName") String userName){
return "success";//返回对应的名为success的页面
}
}
场景2.
方法1.
@RestController
public class TestString {
// 这是测试controller 与restController返回的是视图名还是字符串
@RequestMapping("/test6")
public String getcontroller() {
return "这是restcontroller返回的字符串";
}
}
方法2
@RequestMapping("/test5")
@ResponseBody
public String getstring() {
return "这是字符串不是返回的视图名";
}
场景3.
方法***同场景2里***的方法
@RestController
public class TestJson {
@RequestMapping("/test4")
public Department getDemo() {
Department department = new Department();
department.setDepartment("测试部门");
department.setId(1);
return department;
}
}
@RequestMapping("/test5")
@ResponseBody
public Department getstring() {
Department department = new Department();
department.setId(2);
department.setDepartment("开发部门");
return department;
}
@RestController 和@Controller的区别
假定一个user对象,对象有很多属性(name,sex,age,birth,address,tel)
在我的了解中,这二者的区分为:@restcontroller
为@controller
和@responsebody
的结合
在@controller
注解中,返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,与html页面配合使用的,在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)将user的属性渲染到页面;
在
@restcontroller
中,返回的应该是一个对象,即return一个user对象,这时,在没有页面的情况下,也能看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。
页面输出
{"id":2,"department":"开发部门"}
@RestController与@Controller的作用
作用:
都是用来表示spring某个类的是否可以接收HTTP请求
原因:使用@RestController
注解后,无法跳转指定页面的问题
解决:改用@Controller
注解即可
结论 : @RestController注解相当于@ResponseBody + @Controller合在一起的作用。
为Controller类使用@RestController注解