在SpringMVC中实践restful中同一资源,多种表述的准则

restful服务中有一个很重要的准则就是
同一资源,多种表述
即,当我们需要到rest服务器上去拉去资源的时候,
同一份资源,若客户端期望得到json,rest服务器则将资源以json的形式返回,若是html文档,则服务器将数据渲染成html,在返回。

如下面描述的三种方式:

方式1 使用扩展名
http://www.helloworld.com/user.xml 呈现xml文件
http://www.helloworld.com/user.json 呈现json格式

http://www.test.com/user 使用默认view呈现,比如jsp等

方式2 使用http request header的Accept
GET /user HTTP/1.1
Accept:application/xml

GET /user HTTP/1.1
Accept:application/json

….

方式3 使用参数
http://www.helloworld.com/user?format=xml
http://www.helloworld.com/user?format=json

好了既然说要在Springmvc中实践这一原则。
那么就进入正题如何实现的吧。
Spring中有一个类

org.springframework.web.servlet.view.ContentNegotiatingViewResolver
这个类里面可以配置一些策略。
根据不同的情况使用不同的视图渲染引擎。

    <!--通过此类我们可以实践Restful的一个资源多种表现形式的原则-->
    <bean  class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="favorParameter" value="false" />
        <property name="ignoreAcceptHeader" value="false" />
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json" />
                <entry key="xml" value="application/xml" />
            </map>
        </property>
        <!--默认的视图-->
        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"></bean>
            </list>
        </property>
    </bean>
    <!--如果在ContentNegotiatingViewResolver类中没有找到相对应的视图,则使用jsp的视图-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="order" value="2" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    </bean>

根据url的结尾是否以.json结尾来判断是返回json数据还是html文档。

@RequestMapping("/user/{presentationType}")
    public Object user(@PathVariable String presentationType, Model model) {
        User u = new User();
        model.addAttribute("User", u);
        return "User";
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值