一、什么是多视图支持
1、多视图指的是各种媒体类型,如:json、xml、pdf等。
2、springmvc提供的多视图支持是指将一个能够返回数据的请求,根据请求链接(url)不同的后缀,产生不同的数据格式进行返回。如:http://localhost:8080/springmvc/rest/user/multiView.xml返回的是xml格式数据,而http://localhost:8080/springmvc/rest/user/multiView.json返回的是json格式数据。
二、怎么使用多视图支持
1、导入jar包
一般需要支持什么视图就导入什么jar包
json:jackson-core-asl-1.9.11.jar、jackson-mapper-asl-1.9.11.jar
xml:spring-oxm-3.2.0.RELEASE.jar(在spring的lib包下:spring-framework-3.2.0.RELEASE-dist\spring-framework-3.2.0.RELEASE\libs)
2、配置springmvc的多视图支持
该配置适用于spring3.2及以后的版本
<!-- 配置多视图解析 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"></entry>
<entry key="xml" value="application/xml"></entry>
</map>
</property>
</bean>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"></bean>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>POJO类的全限定名(如:com.lqr.domain.User)</value>
<value>...</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
</list>
</property>
</bean>
3、对javabean类进行xml注解
该注解会影响@ResponseBody,如果要@ResponseBody请不要使用@XmlRootElement
@XmlRootElement
public class User {
private Integer id;
private String username;
private Integer age;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
4、增加springmvc的请求路径
因为spring的官方说明中说到,不同数据格式的数据获取采用的根据后缀名来判定的,所以如果你在web.xml中配置springmvc的url匹配模式是后缀类型(如:*.do),则二者矛盾,故需要增加别的url匹配模式,这样可以保证url的请求是经过springmvc处理的,并不与多视图的访问url冲突。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
5、编写Controller类
跟常规的Controller一样
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping("multiView")
public User getUser() {
User user = new User();
user.setAge(21);
user.setAddress("深圳");
user.setUsername("CSDN_LQR");
return user;
}
}
6、在浏览器访问试试
得到json数据
得到xml数据