• 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

  • 相关阅读:
    分布式日志收集系统: Facebook Scribe之日志收集方案
    20111030 19:37 杨辉三角形 (java)
    pku acm 1833 排列
    俞敏洪郑大演讲经典语句
    自己在inode客户端的大量问题(不断更新中)(20120223 21:24 )
    智力测验:硬币问题
    windows up可以更新但是无法上网的一天挣扎
    hdu1754 I Hate It
    acm算法资源网站
    pku3041 Asteroids
  • 原文地址:https://www.cnblogs.com/yiidian/p/12602859.html
Copyright © 2020-2023  润新知