记录一下@Controller和@RestController的区别

昨天提到了就在这里记录一下
知识点:@RestController 注解相当于@Controller+@ResponseBody和在一起的作用。

  1. 如果只是使用@RestController注解Controller,则Contrller中的方法无法返回jsp页面,或者html,配置视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return里的内容
  2. 如果需要返回指定的页面,则需要用@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数据
    }
}
  1. @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请求

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值