springmvc的多视图支持

一、什么是多视图支持

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数据
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值