Springmvc中处理器方法的返回值类型

一、ModelAndView

若处理器放心处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回ModelAndView比较好。当然,若要返回到ModelAndView,则处理器方法中需要定义ModelAndView对象。

在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面的Ajax异步响应),此时返回ModelAndView,则将总是有一部分多余,要么Model多余,要么View多余,即此时返回ModelAndView将不合适。

二、String

处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址。简而言之String相当于ModelAndView里面的View,只返回视图,没有数据。

当然,我们也可以给它手动加上数据

@RequestMapping(value = "/dosome")
public String dosome(HttpServletRequest request,String name,Integer age)
{
    request.setAttribute("myname",name);
    request.setAttribute("myage",age);
    return "show";
}

也可以用String直接返回文本数据

@RequestMapping(value = "/dosome",prouces = "text/plain;charset=utf-8")
@ResponseBody
public String dosome()
{
    return "返回的文本";
}

三、Void

对于处理器方法返回void的应用场景,AJAX响应,若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回void。简而言之就是,不能表示数据,也不能表示视图。

使用场景:AJAX的异步请求响应。通过HttpServletResponse输出数据,响应AJAX请求。AJAX请求服务器端返回的就是数据,和视图无关。

class Student {
    private String name;
    private Integer age;



    get...
    set...
}

public void dosome(HttpServletResponse response,String name,Integer age) throws IOException{
    Student student = new Student();
    student.setName(name);
    student.setAge(age);
    //JSON格式化对象
    String json = "";
    if(student != null)
    {
        ObjectMapper om = new ObjectMapper();
        json = om.writeValueAsString(student);

    }
    //输出数据,响应ajax请求
    response.setContentType("application/json;charset=utf-8");
    PrintWriter pw = response.getWriter();
    pw.println(json);
    pw.flush();
    pw.close();

}

四、Object

处理器方法也可以返回Object对象。这个Object可以是Integer、String、自定义对象、Map、List等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。返回对象,需要使用@ResponseBody注解,将转换后的JSON数据放入到响应体中。简而言之,Object是对象,对象有属性,属性就是数据,所以返回Object表示数据,和视图无关。

<!--加入驱动注解-->
<mvc:annotation-driven>
@RequestMapping(value = "/dosome")
@ResponseBody
public String dosome(HttpServletRequest request,String name,Integer age)
{
    //调用service,获取请求结果数据,Student对象标识结果数据
    Student student = new Student();
    student.setName("松松");
    student.setAge(22);
    return student;//会被框架转为json
    
}

@ResponseBody的作用:把处理器返回对象转为json后,通过HttpServletResponse输出给浏览器,位置放在方法定义上面,和其它注解没有顺序之间的关系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值