SpringMVC的数据响应
1.SpringMVC数据响应的方式
(1)页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
(2)回写数据
- 直接返回字符串
- 返回对象或集合
2.页面跳转
(1)返回字符串形式
直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转
(2)返回ModelAndView对象
代码示例1:
//UserController.java
@RequestMapping("quick")
public ModelAndView save(){
/*
Model:模型
作用:封装数据
View:视图
作用:展示数据
*/
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username","小C");
//设置视图
modelAndView.setViewName("success");
return modelAndView;
}
//success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Success!${username}</h1>
</body>
</html>
测试截图:
代码示例2:
//也可以采用形参的方式
//UserController.java
@RequestMapping("quick2")
public ModelAndView save2(ModelAndView modelAndView){
//设置模型数据
modelAndView.addObject("username","小C的save2");
//设置视图
modelAndView.setViewName("success");
return modelAndView;
}
//success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Success!${username}</h1>
</body>
</html>
测试截图:
代码示例3:
//也可以采用形参的方式
//UserController.java
@RequestMapping("quick3")
public String save3(Model model){
model.addAttribute("username","小C的save3");
return "success";
}
//success.jsp未改动,上文有
测试截图:
代码示例4:
//也可以采用形参的方式
//UserController.java
@RequestMapping("quick4")
public String save4(HttpServletRequest request){
request.setAttribute("username","小C的save4");
return "success";
}
//success.jsp未改动,上文有
测试截图:
注意!这种方法不常用,因为既然使用了框架,就尽量使用框架为我们提供的东西。
3.回写数据
(1)直接返回字符串
①通过SpringMVC框架注入的response对象,使用response.getWriter().print(“hello world”)回写数据,此时不需要视图跳转,业务方法返回为void
代码示例:
//UserController.java
@RequestMapping("quick5")
public void save5(HttpServletResponse response) throws IOException {
response.getWriter().print("hello world! save5");
}
//success.jsp未改动,上文有
测试截图:
②将需要回写的字符串知己诶返回一,但此时需要通过@ResponseBody注解告知Spring框架,方法返回的字符串不是跳转是直接在http响应体中返回
代码示例:
//UserController.java
@RequestMapping("quick6")
@ResponseBody //告知Spring框架不进行视图跳转,直接进行数据响应
public String save6() throws IOException{
return "hello save6";
}
//success.jsp未改动,上文有
测试截图:
代码示例:
//直接回写字符串
//UserController.java
@RequestMapping("quick7")
@ResponseBody //告知Spring框架不进行视图跳转,直接进行数据响应
public String save7() throws IOException{
return "{\"username\":\"xiaoc\",\"age\":18}";
}
//success.jsp未改动,上文有
测试截图:
代码示例:
//直接回写json格式字符串
//UserController.java
@RequestMapping("quick8")
@ResponseBody //告知Spring框架不进行视图跳转,直接进行数据响应
public String save8() throws IOException{
User user = new User();
user.setUsername("小C");
user.setAge("18");
//使用json的转换工具将对象转换成json格式的字符串再返回
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
//success.jsp未改动,上文有
测试截图:
(2)返回对象或集合
代码示例:
//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"></bean>
</list>
</property>
</bean>
//UserController.java
//期望SpringMVC自动将User转换成json格式的字符串
@RequestMapping("quick9")
@ResponseBody //告知Spring框架不进行视图跳转,直接进行数据响应
public User save9() throws IOException{
User user = new User();
user.setUsername("XC");
user.setAge("18");
return user;
}
测试截图:
在方法上添加@ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc的注解驱动代替上述配置
<!-- mvc的注解驱动-->
<mvc:annotation-driven></mvc:annotation-driven>
测试截图: