昨天提到了就在这里记录一下
知识点:@RestController 注解相当于@Controller+@ResponseBody和在一起的作用。
- 如果只是使用@RestController注解Controller,则Contrller中的方法无法返回jsp页面,或者html,配置视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return里的内容
- 如果需要返回指定的页面,则需要用@Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
@ResponseBody:使用@ResponseBody注解,将返回JSON数据。
1)如果在方法上使用该注解,当前方法返回json数据。
2)如果在类上使用该注解,当前类中所有的方法,都将返回json数据。springmvc默认用jackson对json数据进行转换,但需要添加jsckson的包
总结:只要返回json,必须使用@ResponseBody
@RestController已经被@ResponseBody修饰
代码示例:
1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
若返回json等内容到页面,则需要加@ResponseBody注解
@Controller //普通web层 controller
@RestController // 返回json controller , @Controller + @ResponseBody 根据返回数据@Controller和@RestController二者选一
public class TestController {
@ResponseBody //如果已经使用了@RestController就不需要添加该注解,使用的是@Controller要返回json数据就要添加概述接
public void demo(String uid , @RequestBody Film film){
}
}
@Controller
@RequestMapping("/d2")
public class Demo2Controller {
/**
* 把表单数据封装到pojo,多个对象封装到List
* @return
*/
@RequestMapping("/run8")
public String run8(Category category){
System.out.println(category);
System.out.println(category.getPlist());
return "index"; //返回jsp页面
}
/**
* 获取前端json数据
*
* RequestBody注解:帮我把json数据自动封装进pojo对象中
*
* RequestParam:
* 表单请求体编码格式:
* application/x-www-form-urlencoded 参数名=参数值&参数名=参数值
* multipart/form-data 多部件表单数据
*
* json表单请求体编码格式:application/json 无法使用RequestParam注解
*
* springMVC,ajax响应都是通过控制器方法的返回值,写入响应体
*
*
* ResponseBody注解:把pojo对象数据 转为json数据
*/
@RequestMapping("/run3")
//@ResponseBody 可以加在方法前也可以加在返回值类型前
public @ResponseBody Product run3(@RequestBody Product product,
@RequestParam(name="pname",required = false) String pname){
System.out.println(product);
System.out.println(pname);
Product p1 = new Product("大黄瓜", 10.0, new Date());
return p1; //返回json数据
}
}
- @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
@RestController /* @Controller + @ResponseBody*/
@RequestMapping("/brands")
public class BrandController {
@Resource
private BrandService brandService;
/**
* 接口规范: /cgwebservice/brands/category/76
* @param categoryId
* @return
*/
@GetMapping("/category/{categoryId}")
public BaseResult findAll(@PathVariable("categoryId") Integer categoryId){
//查询
List<Brand> list = brandService.findAll(categoryId);
//封装
return BaseResult.ok("查询成功", list);
}
}
3.二者的共同点:
都是用来表示Spring某个类的时候可以接收HTTP请求