切换主题
三、数据响应
一、SpringMVC的数据响应方式
页面跳转
直接返回字符串
通过
ModelAndView
对象返回
回写数据
- 直接返回字符串
- 返回对象或集合
1、页面跳转
(1)返回字符串形式
直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/quick1")
public String stringTest1(){
return "quick1";
}
}
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/quick2")
public String stringTest2(Model model){
model.addAttribute("username","胡二狗quick2");
return "quick2";
}
}
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/quick3")
public String stringTest2(HttpServletRequest request) {
request.setAttribute("username", "胡二狗quick3");
return "quick3";
}
}
spring-mvc.xml
xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
最终转发资源地址:/WEB-INF/views/index.jsp
信息
转发:forward:/WEB-INE/views/index.jsp
重定向:redirect:/index.jsp
(2)返回ModelAndView对象
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/quick3")
public ModelAndView modelAndViewTest1(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username","胡二狗quick3");
modelAndView.setViewName("quick2");
return modelAndView;
}
}
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/quick3")
public ModelAndView modelAndViewTest2(ModelAndView modelAndView){
modelAndView.addObject("username","胡二狗quick4");
modelAndView.setViewName("quick4");
return modelAndView;
}
}
spring-mvc.xml
xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
2、回写数据
(1)直接返回字符串
利用response回写数据
java@RequestMapping("/huixie1") public void HuiXieDataTest1(HttpServletResponse response) throws IOException { //解决乱码 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("利用response回写数据"); }
利用
@Response注解
回写数据 java@RequestMapping(value = "/huixie2",produces = "text/html;charset=utf-8") //解决中文乱码 @ResponseBody public String HuiXieDataTest2() { return "利用@ResponseBody回写数据"; }
(2)直接返回对象或集合
手动返回字符串json数据
java@RequestMapping(value = "/huixie3",produces = "text/html;charset=utf-8") @ResponseBody public String HuiXieDataTest3(){ return "{\"username\":\"胡二狗\",\"age\":\"13\"}"; }
导入json工具自动转化json数据
工具类坐标
xml<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.4</version> </dependency>
xml<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.4</version> </dependency>
xml<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.4</version> </dependency>
xml<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.15.4</version> </dependency>
测试
java@RequestMapping(value = "/huixie4",produces = "text/html;charset=utf-8") @ResponseBody public String HuiXieDataTest4() throws JsonProcessingException { User user=new User(1,"胡二狗",21); ObjectMapper objectMapper=new ObjectMapper(); String json = objectMapper.writeValueAsString(user); return json; }
SpringMVC使用适配器返回json数据
在
spring-mvc.xml
文件配置适配器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>
测试
java@RequestMapping(value = "/huixie5") @ResponseBody public User HuiXieDataTest5() { User user=new User(1,"胡二狗",21); return user; }
警告
使用适配器后,原先加上
@ResponseBody
注解返回出的字符串会经过jackson
的转化,但肯定转化会失败,所以会报错使用
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: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/context http://www.springframework.org/schema/context/spring-context.xsd "> <context:component-scan base-package="com.hdq.controller"/> <mvc:annotation-driven/> </beans>