SpringMVC响应数据与视图
😂 这篇文章最后更新于1709天前,您需要注意相关的内容是否还可用。
目录导航
响应数据与视图
- 返回字符串
- 返回void
- Model与ModelAndView
- Model
- ModelAndView
- ResponseBody返回json
- RequestBody转对象
响应数据与视图
返回字符串
Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。
@RequestMapping(value="/hello") public String sayHello() { // 跳转到success页面 return "success"; }
返回void
1、默认会跳转到同mapping同名的页面,如@RequestMapping(value="/hello")
默认跳转到hello页面,不存在报404
2、已知道Servlet 原始 API 可以作为控制器中方法的参数,可使用其做转发或重定向
@RequestMapping(value = "/initAdd") public void initAdd(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("请求转发或者重定向"); // 请求转发 转发网址栏地址不变 页面变 // request.getRequestDispatcher("/WEB-INF/pages/add.jsp").forward(request,response); // 重定向 跳转网址会产生变化 // response.sendRedirect(request.getContextPath()+"/add2.jsp"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); // 用getWriter()直接响应数据 response.getWriter().print("你好"); return; }
3、使用SpringMVC关键字进行转发与重定向
如下重定向与转发不仅仅可以跳页面也能跳到其他Controller的mapping
//"forward:转发的JSP路径",不走视图解析器了,所以需要编写完整的路径 //转发 @RequestMapping("/delete") public String delete() throws Exception { // return "forward:/WEB-INF/pages/success.jsp"; return "forward:/user/findAll"; } //重定向 到本机不需要完整路径 @RequestMapping("/count") public String count() throws Exception { return "redirect:/add.jsp"; // return "redirect:/user/findAll"; }
Model与ModelAndView
Model
Model作为参数可调用其addAttribute方法添加数据到request域,如下:
@RequestMapping(value = "/initUpdate") public String initUpdate(Model model) { // 模拟从数据库中查询的数据 User user = new User(); user.setUsername("张三"); model.addAttribute("user", user); return "update"; }
在jsp页面可通过${ requestScope }
或${ user.username }
调用request中内容。
ModelAndView
ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图。它可以同时传入跳转页面名与数据对象,与上方Model功能差不多。只是Model将数据存在Model中,返回String页面名称,一般作为参数,但ModelAndView是作为返回值的。
/** * 返回ModelAndView对象 * 可以传入视图的名称(即跳转的页面),还可以传入对象。 * * @return * @throws Exception */ @RequestMapping(value = "/findAll") public ModelAndView findAll() throws Exception { ModelAndView mv = new ModelAndView(); // 跳转到list.jsp的页面 mv.setViewName("list"); // 模拟从数据库中查询所有的用户信息 List<User> users = new ArrayList<>(); User user1 = new User(); user1.setUsername("张三"); user1.setPassword("123"); User user2 = new User(); user2.setUsername("赵四"); user2.setPassword("456"); users.add(user1); users.add(user2); // 添加对象 mv.addObject("users", users); return mv; }
JSP页面开启c标签调用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
获取集合中值通过forEach遍历
<c:forEach items="${ users }" var="user"> ${ user.username } </c:forEach>
ResponseBody返回json
@ResponseBody注解写在方法上或者方法返回的类型前,或者写在类上或者使用@RestCotroller注解
public @ResponseBody Address testJson(@RequestBody String body) {}
RequestBody转对象
上述代码如果@RequestBody注解修饰的String变量封装成JavaBean对象
public @ResponseBody Address testJson(@RequestBody Address address) {}
使用jackson添加jar包即可,Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <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-annotations</artifactId> <version>2.9.0</version> </dependency>
留言评论
暂无留言