@RestController、@Controller和 @ResponseBody的理解

RestController和 @ResponseBody的理解
@RestController=@Controller+@ResponseBody
  • @Controller 注解的类会被标记,启动后会加入IOC容器。
  • @ResponseBody
    • 在方法上使用@ResponseBody注释,通过HttpMessageConverter将返回结果序列化到响应体,根据结果不同写入到响应体的数据格式也不同【如application/text、application/json、application/xml】。【方法返回不进行视图跳转,而是在http响应体中返回】。
      • HttpMessageConverter是一个接口,通过InputStream和OutputStream读取和写入HTTP请求体和响应体。
      • HttpMessageConverter有很多实现类,你甚至可以自定义实现类来完成消息转换
    • 不加此注解,由RequestMapping注解的方法的返回值会被解析为路径【解析的路径由视图解析器中的前缀+字符串+后缀构成】
    • 加上此注解
      • List、Map、Object都会被转换成JSON格式直接返回。
        响应格式为ContentType:application/json
      • String 字符串类型,响应体为字符串
        响应格式为ContentType:application/text
测试不同的返回值类型得到的数据结果
	@RequestMapping("/testResponseBody")
    @ResponseBody
    public String testResponseBody(){
        return "haHa";
    }
 
    @RequestMapping(value = "testResponseBodyMap")
    @ResponseBody
    public Map<String,Object> testResponseBody2(){
        Map<String,Object> map = new HashMap<>();
        Sport sport1 = new Sport("篮球", "拍");
        Sport sport2 = new Sport("足球", "踢");
        map.put("sport1",sport1);
        map.put("sport2",sport2);
        return map;
    }

    @RequestMapping(value = "testResponseBodyList")
    @ResponseBody
    public List<Object> testResponseBody3(){
        List<Object> list = new ArrayList<>();
        Sport sport1 = new Sport("篮球", "拍");
        Sport sport2 = new Sport("足球", "踢");
        list.add(sport1);
        list.add(sport2);
        return list;
    }
    @RequestMapping(value = "testResponseBodyObject")
    @ResponseBody
    public Sport testResponseBody4(HttpSession session){

        System.out.println(session.getAttribute("运动"));
        System.out.println();
        Sport sport1 = new Sport("篮球", "拍");
        return sport1;
    }

    @RequestMapping(value = "testResponseBodyVoid")
    @ResponseBody
    public void testResponseBody5(HttpSession session){
        Sport sport1 = new Sport("篮球", "拍");
        session.setAttribute("运动",sport1);
    }

前端响应结果

1.字符串 “haHa”
2.Map {"sport2":{"name":"足球","action":"踢"},"sport1":{"name":"篮球","action":"拍"}}
3.List [{"name":"篮球","action":"拍"},{"name":"足球","action":"踢"}]
4.对象 {"name":"篮球","action":"拍"}
5.void 空页面
常用的使用场景:AJAX异步请求中直接返回json或者其它数据格式**

不使用spring MVC 时的ajax:
$(ajax)-function(data)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ResultInfo info = new ResultInfo();
        ....
        //响应数据
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),info);
    }
    最终从前端页面的data中获取到返回的数据

使用SpringMVC时的ajax
$(ajax)-function(data)

	@RequestMapping(value = "testResponseBodyAJAX")
    @ResponseBody
    public ResultInfo testResponseBodyAJAX(){
        ResultInfo info = new ResultInfo();
        return info ;
    }
   最终从前端页面的data中获取到返回的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小李的风

谢谢老板!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值