SpringMVC的数据响应
1、数据响应方式
-
页面跳转
-
直接返回字符串
在
spring-mvc.xml
配置文件中设置如下<!--配置内部资源视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/jsp/"></property> <!--后缀--> <property name="suffix" value=".jsp"></property> <!--最后拼接成完成的请求路径为:/jsp/资源视图名称.jsp--> </bean>
返回字符串视图名称
@Controller @RequestMapping("/user") public class UserController { @RequestMapping(value = "/quick",method = RequestMethod.POST,params = {"username"}) public String save(){ System.out.println("Controller save running...."); return "success"; } }
转发可以在前面添加
forward:
作为前缀,默认可以不写forward:/jsp/success.jsp
重定向可以在前面添加
redirect:
作为前缀,例如:redirect:/success.jsp
-
通过ModelAndView对象返回
package com.zcl.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/user") public class UserController { @RequestMapping(value = "/quick2") public ModelAndView save2(){ /* Model:模型,封装数据 View:视图,展示页面 */ ModelAndView modelAndView = new ModelAndView(); // 设置模型数据 modelAndView.addObject("username","zhangsan"); // 设置返回的视图名称 modelAndView.setViewName("success"); return modelAndView; } }
username.jsp页面
<%-- Created by IntelliJ IDEA. User: zhong Date: 2022/4/23 Time: 22:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>Success${username}</h1> </body> </html>
-
-
回显数据
-
直接返回字符串
-
通过SpringMVC框架注入的response对象,使用response.getWriter().print(“Hello World”)回写数据,此时不需要视图跳转,业务返回方法值为
void
@Controller @RequestMapping("/user") public class UserController { /** * 不返回视图直接请求打印 * @param response * @throws IOException */ @RequestMapping(value = "/quick6") public void save6(HttpServletResponse response) throws IOException { response.getWriter().print("HelloWorld"); } }
-
将需要回写的字符串直接返回,但此时需要通过==
@ResponseBody
注解==告知Spring MVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。重点掌握
@Controller @RequestMapping("/user") public class UserController { /** * 通过 @ResponseBody注解告知springmvc框架改方法不进行页面跳转,直接返回字符串 * @return * @throws IOException */ @RequestMapping(value = "/quick7") @ResponseBody public String save7() throws IOException { return "HelloWorld2"; } }
-
原始回写
json
格式字符串@Controller @RequestMapping("/user") public class UserController { /** * 返回指定的字符串格式 * @return * @throws IOException */ @RequestMapping(value = "/quick8") @ResponseBody public String save8() throws IOException { return "{\"username\",\"zhangsan\",\"age\",\"18\"}"; } }
-
通过json转换工具将对象转换并返回json对象
json转换工具的依赖坐标【两个不同的】
在
pox.xml
包下写入<!--导入json格式转换依赖坐标--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <!--下面是3个一起的json转换坐标--> <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> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
@Controller @RequestMapping("/user") public class UserController { /** * 通过json转换工具回写实体类对象 * @return * @throws IOException */ @RequestMapping(value = "/quick9") @ResponseBody public String save9() throws IOException { User user = new User(); user.setUsername("zhangsan"); user.setAge(18); // 第二种json转换工具 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(user); // 第一种转换方式 String json1 = JSON.toJSONString(user); return json1; } }
-
-
返回对象或集合
总要的核心配置
在
spring-mvc.xml
核心配置文件中配置,不然不会起效<!--配置处理器映射器--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </list> </property> </bean>
使用如下代码简化上面的核心配置,以后使用springMVC先将下面的配置写上
请对照
spring-mvc.xml
核心配置文件,补充最后一个配置<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--组件扫描--> <context:component-scan base-package="com.zcl.controller"/> <!--配置内部资源视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/jsp/"></property> <!--后缀--> <property name="suffix" value=".jsp"></property> <!--最后拼接成完成的请求路径为:/jsp/资源视图名称.jsp--> </bean> <!--配置处理器映射器--> <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <!–注入json的转换器–> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </list> </property> </bean>--> <!--mvc注解驱动,替换上面的json转换器--> <!--需要在顶部写入对应的引用空间和约束--> <mvc:annotation-driven/> </beans>
实现代码
@Controller @RequestMapping("/user") public class UserController { /** * 根据springmvc框架来进行转换 * @return * @throws IOException */ @RequestMapping(value = "/quick10") @ResponseBody public User save10() throws IOException { User user = new User(); user.setUsername("zhangsan"); user.setAge(18); return user; } }
-