SpringMVC 数据响应
SpringMVC 数据响应
SpringMVC的数据响应方式
- 页面跳转
- 直接返回字符串
- 通过ModelAndView对象访问
- 回写数据
- 直接返回字符串
- 返回对象集合
1. 页面跳转
1.1 返回字符串形式
-
直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转
//方法上 请求地址 http://localhost:port/quick @RequestMapping("/quick") public String save(){ System.out.println("UserController save running...."); //跳转的视图 //默认 forward: 可以改成 redirect: return "success"; }
1.2 返回ModelAndView对象
@RequestMapping("/quick2")
public ModelAndView save2(){
/*
* Model:模型 作用封装数据
* View :视图 作用展示数据*/
ModelAndView modelAndView = new ModelAndView();
//设置模型数据
modelAndView.addObject("username", "aowu");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
SpringMVC 可以帮助方法的参数进行注入
@RequestMapping("/quick3")
//SpringMVC 可以帮助方法的参数进行注入
public ModelAndView save3(ModelAndView modelAndView){
//设置模型数据
modelAndView.addObject("username", "aowu_wuhu");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
Model和View分开 View以字符串形式返回
@RequestMapping("/quick4")
//Model和View分开 View以字符串形式返回
public String save4(Model model){
model.addAttribute("username", "aowu_wuhu_haha");
return "success";
}
使用MVC框架注入JavaWeb Request对象 (不常用)
@RequestMapping("/quick5")
//SpringMVC框架帮助方法的参数进行注入
public String save5(HttpServletRequest request){
request.setAttribute("username","Wuhu_Aowu");
return "success";
}
2.回写数据
2.1 直接返回字符串
Web基础阶段,客户端访问服务器端,如果想直接回写字符串作为响应体返回的话,只需要使用
response.getWriter().print("hello world")即可,那么在Controller中想直接回写字符串该怎样呢?
-
通过SpringMVC框架注入的response对象,使用
response.getWriter().print("hello world")回写数据,此时不需要视图跳转,业务方法返回值为void.@RequestMapping("/quick6") //SpringMVC框架帮助方法的参数进行注入 //注入response对象 利用response对象进行回写 public void save6(HttpServletResponse response) throws IOException { response.getWriter().print("Hey Noobs!"); } -
将需要回写的字符串直接返回,但此时需要通过
@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳转时直接在http响应体中返回@RequestMapping("/quick7") @ResponseBody //告知SpringMVC框架,该方法不进行视图跳转,直接回写数据 public String save7(){ return "im noob"; } -
使用Json转换工具将对象转换成JSON格式字符串再返回
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.3</version>
</dependency>
@RequestMapping("/quick9")
@ResponseBody //告知SpringMVC框架,该方法不进行视图跳转,直接回写数据
public String save9() throws JsonProcessingException {
User user=new User();
user.setUsername("Aowu");
user.setAddr("Moon");
user.setAge(100);
//使用Json转换工具将对象转换成JSON格式字符串再返回
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
return json;
}
2.2 返回对象或集合
让SpringMVC自动将User转换成Json格式的字符串
<!--配置处理器映射器-->
<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>
@RequestMapping("/quick10")
@ResponseBody
//让SpringMVC自动将User转换成Json格式的字符串
public User save10() throws JsonProcessingException {
User user=new User();
user.setUsername("Wuhu");
user.setAddr("Moon");
user.setAge(200);
return user;
}
在方法上添加@ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc注解驱动代替上述配置
<!--mvc注解驱动-->
<mvc:annotation-driven/>
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解折器称为Spring MVC的三大组件。
使用<mvc:annotation-driven>动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在Spring-xml.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
同时使用<mvc:annotation-driven>默认底层就会集成,ackson进行对象或集合的json格式字符串的转换。