zoukankan      html  css  js  c++  java
  • Spring MVC中控制器方法的返回值

    原文链接:http://www.yiidian.com/springmvc/return-value.html

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

    • 普通字符串
    • 转发字符串
    • 重定字符串
    • void
    • ModelAndView
    • Java对象

    1 普通字符串

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

    代码示例:

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

    视图解析器配置:
    file

    页面地址:

    file

    2 转发字符串

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

    代码示例:

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

    页面地址:

    file

    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

    file

    欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
    如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/yiidian/p/12602859.html
Copyright © 2011-2022 走看看