3-SpringMVC的数据响应

1.2页面跳转

1.2.2 ModelAndView
@RequestMapping(value = @RequestMapping(value = "/quick2")
public ModelAndView save2(){
ModelAndView modelAndView = new ModelAndView();
// 设置模型数据 jsp中通过${name}取
modelAndView.addObject("name","zhangsan");
// 设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
//参数ModelAndView 由 Spring框架注入
@RequestMapping(value = @RequestMapping(value = "/quick3")
public ModelAndView save3(ModelAndView modelAndView){
modelAndView.addObject("username","wangwu");
modelAndView.setViewName("success");
return modelAndView;
}
@RequestMapping(value = @RequestMapping(value = "/quick4")
public String save4(Model model){
model.addAttribute("key4","value4");
return "success";
}
// 不推荐下面这种,因为用了SpringMVC 就用框架的
@RequestMapping(value = @RequestMapping(value = "/quick5")
public String save5(HttpServletRequest servletRequest){
servletRequest.setAttribute("key5","value5");
return "success";
}
1.3回写数据
1.3.1直接回写字符串
- 尽可能不用下面这种
@RequestMapping(value = @RequestMapping(value = "/quick6")
public void save6(HttpServletResponse servletResponse) throws IOException {
servletResponse.getWriter().println("/quick6");
}
用注解@ResponseBody
告诉SpringMVC,方法返回的字符串不是跳转,而是直接在http响应体中返回
@RequestMapping(value = @RequestMapping(value = "/quick7")
@ResponseBody
public String save7() throws IOException {
return "/quick7";
}
1.3.2回写json字符串
方法一
@RequestMapping(value = @RequestMapping(value = "/quick8")
@ResponseBody
public String save8() throws IOException {
return "{\"username\":\"zhangshan\",\"age\":18}";
}
方法二:用jackson工具将对象转为Json字符串
@RequestMapping(@RequestMapping(value = "/quick9")
@ResponseBody
public String save9() throws IOException {
User user = new User("aishang",25);
// json转换工具将对象转为Json字符串
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.writeValueAsString(user);
}
- 导坐标
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.9.0version>
dependency>
这里可能出现ObjectMapper NoClassDefError
通过在Project Structure -> Artifacts -> 对应war exploded -> Out Layout-> 添加对lib中
1.3.3 返回对象或集合
简化
每次返回都要用ObjectMapper 转,重复过多。通过为处理适配器配置消息转换参数,指定使用jackson进行对象或集合的转换。
RequestMappingHandlerAdapter是DispatcherServlet.properties中配置的
@RequestMapping(@RequestMapping(value = "/quick9")
@ResponseBody
//期望SpringMVC将User转化成json字符串
public User save10() {
User user = new User("aishang",25);
return user;
}
//spring-mvc.xml
class
="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
"messageConverters">
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
property>
</bean>
上面的配置也麻烦,通过注解进一步简化:
在SpringMVC的各个组件中,RequestMappingHandlerMapping处理器映射器、处理器适配器RequestMappingHandlerAdapter、视图解析器称为它的三大组件。
使用<mvc:annotation-driven>自动加载RequestMappingHandlerAdapter和RequestMappingHandlerMapping,可用在spring-mvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。同时内部集成jackson进行对象或集合到json字符串的转换。
// 要加mvc的命名空间
<mvc:annotation-driven/>
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!