企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # void返回值 1. 使用 request 转向页面,如下: ~~~ request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response); ~~~ 2. 也可以通过 response 页面重定向: `response.sendRedirect("testRetrunString")` 3. 也可以通过 response 指定响应结果,例如响应 json 数据: ~~~ response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json 串"); ~~~ # ModelAndView ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。 该对象中有两个方法: ![](https://img.kancloud.cn/57/0c/570c2e33a88ecccaf2e7f6f4d82713e2_772x89.png) ![](https://img.kancloud.cn/c5/2e/c52efbc69dd6f7789fc5f7e3be4df5ac_645x115.png) ~~~ @RequestMapping("/testReturnModelAndView") public ModelAndView testReturnModelAndView() { ModelAndView mv = new ModelAndView(); mv.addObject("username", "张三"); mv.setViewName("success"); return mv; } ~~~ 注意: 我们在页面上上获取使用的是 requestScope.username 取的,所以返回 ModelAndView 类型时,浏 览器跳转只能是请求转发。 # 转发和重定向 ## forward转发 controller 方法在提供了 String 类型的返回值之后,默认就是请求转发。我们也可以写成 ~~~ @RequestMapping("/testForward") public String testForward() { System.out.println("AccountController 的 testForward 方法执行了。。。。"); return "forward:/WEB-INF/pages/success.jsp"; } ~~~ 需要注意的是,如果用了 formward:则路径必须写成实际视图 url,不能写逻辑视图。 它相当于 ~~~ "request.getRequestDispatcher("url").forward(request,response)" ~~~ 使用请求 转发,既可以转发到 jsp,也可以转发到其他的控制器方法。 ## Redirect重定向 contrller 方法提供了一个 String 类型返回值之后,它需要在返回值里使用:redirect: ~~~ @RequestMapping("/testRedirect") public String testRedirect() { System.out.println("AccountController 的 testRedirect 方法执行了。。。。"); return "redirect:testReturnModelAndView"; } ~~~ 它相当于 ~~~ "response.sendRedirect(url)" ~~~ 需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不 能写在 WEB-INF 目录中,否则无法找到。 # ResponseBody响应json数据 **作用:** 该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的 数据如:json,xml 等,通过 Response 响应给客户端 **需求:** 使用@ResponseBody 注解实现将 controller 方法返回对象转换为 json 响应给客户端。 **前置知识点:** Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入 jackson 的包。 ~~~ @Controller("jsonController") public class JsonController { @RequestMapping("/testResponseJson") public @ResponseBody Account testResponseJson(@RequestBody Account account) { System.out.println("异步请求:"+account); return account; } } ~~~