javaWeb控制器方法的返回值

本文介绍了使用@Controller注解的处理器方法的四种返回类型:ModelAndView、String、Void和自定义类型对象。对于ModelAndView,适合处理跳转并传递数据;返回String可直接指定视图或返回字符串;无返回值Void常用于AJAX响应;返回自定义类型对象则方便返回各种内容,通常配合@ResponseBody注解将JSON数据放入响应体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​ 使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
➢ 第一种:ModelAndView
➢ 第二种:String
➢ 第三种:无返回值 void
➢ 第四种:返回自定义类型对象

要根据不同的情况返回相应的值。

一、返回ModelAndView
  • 返回数据与视图

  • 适合一些处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据

  • 返回ModelAndView对象需要处理器方法中定义 ModelAndView 对象。

  • 使用**addobject(名称,内容)添加返回的数据,使用setViewName(全路径返回视图或视图逻辑名称)**返回视图。

    注:视图逻辑名称是指配置过视图解析器的

  • @RequestMapping("/returnModelAndView.do")
    public ModelAndView returnModelAndView(){
        ModelAndView mv = new ModelAndView();//创建ModelAndView对象
        mv.addObject("msg","返回ModelAndView");//返回数据
        mv.setViewName("show");//返回页面
        return mv;
    }
    
二、返回String
  • 返回String时有两种情况,返回视图返回字符串

  • 返回视图

    • @RequestMapping("/returnStringView.do")
      public String returnStringView(HttpServletRequest request,String name, Integer age){
          request.setAttribute("name",name);//返回数据
          request.setAttribute("age",age);
          request.setAttribute("msg","通过视图解析器返回的页面");
          //返回页面
          return "show";
      }
      
    • 直接return "全路径返回视图或视图逻辑名称"

    • 也可以把数据传回到页面,通过作用域request、session、application等返回

  • 返回字符串

    • @RequestMapping(value = "/returnStringData.do" ,produces = "text/plain;charset=utf-8")
      @ResponseBody
      public String returnStringData(String name,Integer age){
          return "返回String数据\nname:"+name+"\nage:"+age;
      }
      
    • 只需要在方法上面添加一个@ResponseBody注解即可

    • 注:加入produces = "text/plain;charset=utf-8"是因为直接返回字符串会乱码,加了就不了

三、无返回值Void
  • 对于处理器方法返回 void 的应用场景,AJAX 响应,需要手动响应。用的少,了解即可。
    比如处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

  • @RequestMapping("/returnVoidAjax.do")
    public void returnVoidAjax(HttpServletResponse response,String name,Integer age) throws IOException {
        //创建Student对象
        Student student = new Student();
        student.setName(name);
        student.setAge(age);
    
        //使用jackson工具把student对象转成json格式
        ObjectMapper om = new ObjectMapper();
        String json= om.writeValueAsString(student);
    
        //使用HttpServletResponse把数据传输到浏览器
        response.setContentType("application/json;charset=utf-8");//设置编码
        PrintWriter pw = response.getWriter();
        pw.println(json);
        //打开资源
        pw.flush();
        //关闭资源
        pw.close();
    }
    
  • 需要在pom.xml文件中加入 jackson 依赖

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.0</version>
    </dependency>
    
四、返回自定义类型对象
  • 这个用的最多,可以返回各式各样的内容,例如Integer、String、list集合、自定义对象、Map等等

  • 返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。
    返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。

  • 也是响应ajax,不过可以用框架响应ajax,比手动响应简便非常多

  • 也需要在pom.xml文件中加入jackson依赖

  • 例如,返回一个自己写好的java对象Student

    @RequestMapping("/returnStudentJsonObject.do")
    @ResponseBody
    public Student returnStudentJsonObject(String name, Integer age){
        Student student = new Student();
        student.setName(name);
        student.setAge(age);
        return student;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值