springMVC的数据响应形式主要分为两大类,一种是根据返回结果进行页面跳转,另一种是返回回写数据。具体分类如下:
1.页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
2.回写数据
- 直接返回字符串
- 返回对象或集合
一、页面跳转
1.直接返回字符串:直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。
@RequestMapping(value = "/save",method = RequestMethod.GET,params = {"username"})
public String save(){
System.out.println("Save running");
return "success";
}
2.返回ModelAndView对象
//返回ModelAndView对象
@RequestMapping(value = "/quick")
public ModelAndView quick(){
ModelAndView modelAndView = new ModelAndView();
/*
* Model:模型,用于封装数据
* View:视图, 用于展示数据
* */
//设置模型数据
modelAndView.addObject("username","zhanglei");
//设置视图名称
modelAndView.setViewName("success");
return modelAndView;
}
/*
* SpringMVC会自动根据方法的参数值进行注入
* 所以ModelAndView可以是形参,SpringMVC会自动帮你创建实体对象进行调用。
* */
@RequestMapping(value = "/quick1")
public ModelAndView quick1(ModelAndView modelAndView){
modelAndView.addObject("username","zhang");
modelAndView.setViewName("success");
return modelAndView;
}
/*
* 视图根据返回字符串
* Model以形参的形式,由SpringMVC创建,并在其中传入数据
* */
@RequestMapping(value = "/quick2")
public String quick2(Model model){
model.addAttribute("username","sun");
return "success";
}
二、回写数据
1.直接返回字符串
使用ResponseBody注解,告知SpringMVC框架,该方法不根据返回字符串进行跳转,直接将字符串在http响应体中返回
@RequestMapping(value = "/quick4")
@ResponseBody //告知SpringMVC框架该方法不进行视图跳转,直接进行数据响应
public String quick4(){
return "success";
}
2.返回对象或集合
我们可以直接通过SpringMVC将对象或集合中的数据转换成json。但是需要为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换。想要使用jackson对对象或集合进行转换,首先要导入jackson的坐标:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.4</version>
</dependency>
SpringMVC的默认处理器适配器是 RequestMappingHandlerAdapter ,在该类中提供了 setArgumentResolvers 方法用于对参数转换进行设置,其传入的参数是一个List对象。我们只需在springMVC的配置文件中,对该类的setArgumentResolvers 方法的参数进行注入,就可以设置我们想要的转换形式。
<bean id="myAdapter" 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>
这样设置之后,我们在处理器(@Controller)中,直接返回实体对象。SpringMVC会自动将里面的信息封装为JSON对象,然后进行返回。
@RequestMapping(value = "/quick6")
@ResponseBody
public User quick6() throws Exception {
User user = new User();
user.setAge(18);
user.setName("zhang");
return user;
}
也可以在SpringMVC的配置文件中,直接使用 <mvc:annotation-driven> ,mvc的注解驱动,取代刚才在SpringMVC配置文件中的相关配置。使用 <mvc:annotation-driven>自动加载 RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter( 处 理 适 配 器 ),并且默认底层就会集成jackson进行对象或集合的json格式字符串的转换。
但是需要引入一下约束文件,才能使用
<!--设置约束文件-->
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven />
评论 (0)