龙空技术网

SpringMVC总结二:控制器方法的返回值

小瓜瓜666 71

前言:

此刻朋友们对“ajax跳转到指定控制器”大约比较注意,姐妹们都需要知道一些“ajax跳转到指定控制器”的相关资讯。那么小编同时在网摘上收集了一些对于“ajax跳转到指定控制器””的相关知识,希望同学们能喜欢,小伙伴们快快来学习一下吧!

控制器方法的返回值表示本次请求的处理结果,返回值有ModelAndView, String, void , Object;

1、返回值:ModelAndView数据和视图

请求的结果有数据和视图,使用ModelAndView最方便数据:存放request作用域。视图:执行forward转发操作

2、String 视图

1、框架对返回值是String,执行的是forward转发操作。2、视图可以表示为完整视图路径, 或者视图的逻辑名称@RequestMapping(value ="/return-string-view.do")public String doReturnStringView1(HttpServletRequest request,String name, Integer age) {        System.out.println("执行了MyController的doReturnStringView1方法name=");              //返回结果,forward,转发到show.jsp        //逻辑名称, 需要配置视图解析器        return "show";}@RequestMapping(value ="/return-string-view2.do")public String doReturnStringView2(HttpServletRequest request,String name, Integer age) {    System.out.println("执行了MyController的doReturnStringView2方法name=");    //完整视图路径,不能使用视图解析器    return "/WEB-INF/view/show.jsp";}

3、void 没有数据和视图

void: 没有数据和视图, 可以使用HttpServletResponse对象输出数据,响应ajax请求。

    /**     * 控制器方法返回是void ,响应ajax请求。 使用HttpServletResponse输出数据     */    @RequestMapping("/return-void-ajax.do")    public void returnVoidAjax(HttpServletResponse response,String name,Integer age) throws IOException {        System.out.println("处理void返回类型, name="+name+",age="+age);        //调用service得到结果对象        Student  student = new Student();        student.setName(name+"同学");        student.setAge(age);        //把对象转为json        ObjectMapper om  = new ObjectMapper();        String json  = om.writeValueAsString(student);        System.out.println("服务器端对象转为的json==="+json);        //输出json,响应ajax        response.setContentType("application/json;charset=utf-8");        PrintWriter pw  = response.getWriter();        pw.println(json);        pw.flush();        pw.close();    }

4、Object

返回对象Object ,可以是List, Student , Map ,String ,Integer.... 这些都是数据, 而ajax请求需要的就是数据。 在ajax请求中,一般需要从服务器返回的是json格式的数据, 经常要处理java对象到json的转换。而且还需要输出数据响应ajax请求。 框架提供了处理 java对象到json转换, 还是数据输出工作。

/**     * 控制器方法返回Student--json     * application/json;charset=utf-8     *     * 框架的处理模式:     *  1. 框架根据控制器方法的返回值类型, 找到HttpMessageConverter接口的实现类。     *     最后找到的是MappingJackson2HttpMessageConverter.     *     *  2.使用实现类MappingJackson2HttpMessageConverter.执行他的write()方法,把     *     student对象转为了json格式的数据     *     *  3.框架使用@ResponseBody注解,把2中的json输出给浏览器。     *     *  设置的content-type: application/json;charset=utf-8     */    @RequestMapping("/doStudentJson.do")    @ResponseBody    public Student doAjaxJson(String name,Integer age){        System.out.println("控制器方法返回自定义对象Student,转为json。"+name+"=="+age);        Student student = new Student();        student.setName("同学"+name);        student.setAge(age);        return student;    }

5、控制器方法的返回值是String那么默认情况下是代表的视图,我们有办法将它的返回值改为数据吗?

在控制器方法的上面添加@ResponseBody

    /**     * 控制器方法返回String--数据     *     * 区分返回值String是数据还是视图。     * 1.方法上面有@ReponseBody注解就是数据     * 2.方法上面没有@ResponseBody注解就是视图     *     *     * Content-Type: text/plain;charset=ISO-8859-1     *     * 解决中文,需要使用@RequestMapping的produces属性。     * produces属性: 指定content-type的值     *     *     * 框架处理String返回值     * 1. 框架使用的StringHttpMessageConverter     * 2. StringHttpMessageConverter使用的是text/plain;charset=ISO-8859-1。     *     *     *   content-type: 告诉浏览器, 怎么显示服务器返回的数据     */    @RequestMapping(value = "/doStringData.do",produces = "text/plain;charset=utf-8")    @ResponseBody    public String doStringData(String name,Integer age){        System.out.println("控制器方法返回String,是数据");        return "Hello SpringMVC注解式开发";    }

6、@ResponseBody注解的作用:

		@ResponseBody注解作用等于以下代码:			  //输出json,响应ajax        response.setContentType("application/json;charset=utf-8");        PrintWriter pw  = response.getWriter();        pw.println(json);        pw.flush();        pw.close();

标签: #ajax跳转到指定控制器