SpringMVC返回数据

举报
bug郭 发表于 2022/10/06 22:27:01 2022/10/06
【摘要】 返回数据我们接收到客户端发来的请求后,就后对请求进行业务处理,然后返回响应数据!而我们SpringMVC默认是返回一个html静态页面,我们可以通过@ResponseBody返回非静态页面! 返回静态页面@Controller@ResponseBody@RequestMappingpublic class TestMapping { //@GetMapping("/index") ...

返回数据

我们接收到客户端发来的请求后,就后对请求进行业务处理,然后返回响应数据!

而我们SpringMVC默认是返回一个html静态页面,我们可以通过@ResponseBody返回非静态页面!

返回静态页面

@Controller
@ResponseBody
@RequestMapping
public class TestMapping {
    //@GetMapping("/index")
    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public String getMapper(){
        return "index.html";
    }
}

在这里插入图片描述

在这里插入图片描述

返回text/html

我们加上@ResponseBody就可以返回一个非静态页面

@ResponseBody
@RequestMapping
public class TestMapping {
    //@GetMapping("/index")
    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public String getMapper(){
        return "<h1>index</h1>";
    }
}

在这里插入图片描述

返回JSON对象

@RestController //这个注解是@ResponseBody和@Controller组合!
public class GetJson {
    @RequestMapping("/getJson")
    public HashMap<String,Integer> getJson(){
            HashMap<String,Integer> map = new HashMap<>();
            map.put("刘备",18);
            map.put("曹操",21);
            map.put("诸葛亮",88);
           return map;
    }
}

在这里插入图片描述
我们通过Fiddler抓包可以看到服务器返回的响应信息就是JSON格式的数据!

在这里插入图片描述

可以看到我们SpringMVC模块内置了进行JSON数据转换的依赖,不需要像Servlet项目一样通过引入Jackon等依赖进行转换!
而且转换过程直接由Spring完成,也不用通过自己手动进行转换!

请求转发或请求重定向

return 不止可以返回一个视图给前端,还能实现跳转
跳转方式有如下2种:

  • forward : 请求转发
  • redirect : 请求重定向
@Controller
@RequestMapping("/root")
public class Return {
    @RequestMapping("/index1")
    public String index1(){
        //请求转发
        return "forward:/index.html";
    }
    @RequestMapping("/index2")
    public String index3(){
        //请求重定向
        return "redirect:/index.html";
    }
}

forward请求转发
在这里插入图片描述

可以看到请求转发,上面的url地址是不变的,而网页的内容是index.html页面内容!

redirect请求重定向
在这里插入图片描述

请求重定向redirect输入路由接口,直接就跳转到重定向的路由地址,url也随着改变!

注意:

因为我们这里要返回一个静态页面给前端,而又用了redirectforward进行转发和重定向,就不能使用@ResponseBody注解,不然会返回字符串!

forward和redirect区别

  • 请求重定向(redirect),将请求重新定位到资源;请求转发(forward) 服务器转发!
  • 请求重定向地址发生改变,请求转发地址不变
  • 请求重定向与直接访问新地址效果一样,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问!

这两个如何区分呢?

例如张三找你借钱,你没钱,你向李四借钱再借给张三,你就是请求转发!而你直接告诉张三没钱,让他去找李四借,就是请求重定向!所以请求转发张三找你借钱就好了所以地址不变,而请求重定向,让他找李四借所以地址也改变了

请求转发外部资源丢失问题
请求转发forward如果需要的资源和访问的页面不在通一个页面下,会导致外部资源丢失!
在这里插入图片描述
通过redirect请求重定向!!!

在这里插入图片描述
通过forward请求转发
在这里插入图片描述
外部资源丢失!

@RequestBody说明

  • @RequestBody返回的值如果是字符会转成text/html,如果返回的是对象会转成application/json返回给前端
  • @RequestBody可以用来修饰类或者方法,修饰类表示类中所有的方法都会返回html或者json,而不是视图

@RestController@Controller@ResponseBody组合注解

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。