2022-08-20  阅读(77)

Spring MVC的控制器方法返回值可以支持多种写法,每种写法的场景和效果都不一样。下面分别来看看每种返回值的使用。

  1. 普通字符串
  2. 转发字符串
  3. 重定字符串
  4. void
  5. ModelAndView
  6. Java对象

1 普通字符串

返回普通字符串这种情况比较常见,主要用在我们处理完业务逻辑后,需要跳转到应用的其他页面。

代码示例:

            
            /**
             * 1)字符串 - 普通字符串(代表页面名称,不是完整路径,最后经过视图解析器的解析)
             *    优势:写法简单
             *    劣势:只能转发到视图解析器指定的特定目录
             */
            @RequestMapping("/string")
            public String string(){
                System.out.println("一点教程网-普通字符串....");
                //这里返回页面名称,必须经过视图解析器解析的!!!
                return "index";
            }

视图解析器配置:

202202131334587111.png

页面地址:

202202131334592902.png

2 转发字符串

普通字符串,只能转发到视图解析器指定前缀的目录下的页面,如果想转发到视图解析器目录以外的页面,这时可以使用转发字符串的写法。

代码示例:

            
            /**
             * 2)字符串 - 转发字符串
             *     转发字符串格式:
             *        forward:完整页面的路径      例如:forward:/pages/index.jsp
             *
             *    优势:更加灵活,可以转到本项目下的任何页面,可以传递request域对象数据
             *    劣势:写法稍复杂
             */
            @RequestMapping("/forward")
            public String forward(){
                System.out.println("一点教程网-转发字符串....");
                return "forward:/index.html";
            }

页面地址:

202202131334597853.png

3 重定向字符串

如果希望使用重定向的方式跳转页面,这时可以使用重定向字符串完成。

代码示例:

            
            /**
             * 3)字符串 - 重定向字符串
             *     重定向字符串格式:
             *        redirect:完整页面的路径      例如:redirect:/pages/index.jsp
             *
             *    优势:很灵活,可以重定向到项目内和项目以外的页面
             *    劣势:写法稍复杂,不能转发requesy域对象数据
             */
            @RequestMapping("/redirect")
            public String redirect(){
                System.out.println("一点教程网-重定向字符串....");
                return "redirect:http://www.yiidian.com";
            }

4 返回空

一般我们在文件下载的时候,就不需要控制器方法返回任何内容,所以设置为void即可。

代码示例:

            
            /**
             * 4)返回void
             *    用于文件下载
             */
            @RequestMapping("/void")
            public void returnVoid(HttpServletResponse response){
                System.out.println("void....");
            
                //模拟文件下载
                //1.读取需要下载的文件
                File file = new File("e:/spring.jpg");
            
                //2.构建文件输入流
                try {
                    InputStream in = new FileInputStream(file);
            
                    //3.获取文件输出流(从response对象获取)
                    OutputStream out = response.getOutputStream();
            
                    //4.边读边写
                    byte[] buf = new byte[1024];
                    int len = 0;
            
                    while( (len = in.read(buf))!=-1  ){ 
                        out.write(buf,0,len);
                    }
            
                    //5.流资源关闭
                    out.close();
                    in.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return;
            }

5 ModelAndView

Spring MVC提供了ModelAndView对象,该对象既可以存储数据到request域,也可以设置视图。其实Spring MVC任何处理器适配器最终执行完控制器后,都会返回ModelAndView对象。所以这是一个比较底层的对象。

代码示例:

            
            /**
             * 5)ModelAndView: 封装了Model数据和视图数据的对象
             */
            @RequestMapping("/mv")
            public ModelAndView mv(){
                ModelAndView mv = new ModelAndView();
                //设置模型数据
                mv.addObject("model","一点教程网");
                //设置视图数据
                mv.setViewName("index");
                return mv;
            }

6 返回Java对象

这里返回的Java对象,可能是普通JavaBean,也可以是List或Map集合等。一般希望把控制器的返回Java对象转换为Json字符串,才需要返回Java对象。我们下章节重点来讲解:《Spring MVC JSON数据转换》

源码下载:https://pan.baidu.com/s/1sINJe9oIuysksT00LK31ng


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文