【问题标题】:Preferred Semantics for CXF JAX-RSCXF JAX-RS 的首选语义
【发布时间】:2014-01-27 18:49:54
【问题描述】:

我想知道 CXF XML 上下文文件中jaxrs:server 配置的首选语义是什么。

例如,如果我有两个用于用户和订单的服务实现,并且可以从相对路径 "/user""/order" 访问它们。

我会这样配置服务吗:

<jaxrs:server id="userService" address="/user">
    <jaxrs:serviceBeans>
        <bean class="com.example.UserServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

<jaxrs:server id="orderService" address="/order">
    <jaxrs:serviceBeans>
        <bean class="com.example.OrderServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

或者这样:

<jaxrs:server id="appService" address="/">
    <jaxrs:serviceBeans>
        <!-- 
            Path configured using @Path annotations on the class definition:

            @Path(value="/user")
            public class UserServiceImpl {...}
        -->
        <bean class="com.example.UserServiceImpl />
        <bean class="com.example.OrderServiceImpl />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

这似乎只是语义上的差异。第二种方式允许我们不重复提供者。但我想知道在执行此配置时应该考虑什么?

谢谢!

【问题讨论】:

  • 将restful服务分组为“资源”通常是有意义的,通常在资源级别会有一个@path,如'/user',每个方法都有一个@path,如'/add',' /delete' 等,所以对我来说,您帖子中的第一个选项很有意义。也就是说,这一切都取决于手头的要求......

标签: java web-services cxf jax-rs


【解决方案1】:

我使用第二种方式,如果服务相关,我会尝试将它们组合在一起......如果您可以获得特定用户的订单,那么它们就会相关。所以我通常有一个“v1” api 服务器(版本控制支持),一个用于记录它(我使用不同的提供程序或扩展映射),一个用于专门的(如具有更严格安全性的管理员)访问,等等。 但我会使用一些地址而不是将其留空,例如至少“api”或版本“v1”。

另外,您的 cxf.xml 可以充满 jaxrs 服务器。如果它们相关联,它们几乎不可能需要不同的提供者、映射、扩展。

但是这个问题是关于意见的,也许会被关闭。

【讨论】:

    【解决方案2】:

    如果它们具有相同的基地址,我通常会将它们分组 假设我们有这样的资源 URL

    <jaxrs:server id="userService" address="api/user">
    </jaxrs:server>
    
    <jaxrs:server id="orderService" address="api/order">
    </jaxrs:server>
    

    作为

    <jaxrs:server id="appService" address="/api">
        <jaxrs:serviceBeans>
            <!-- 
                @Path(value="/user")
             -->
            <bean class="com.example.UserServiceImpl />
            <bean class="com.example.OrderServiceImpl />
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
        </jaxrs:providers>
    

    并且单独以防它们具有不同的基本 URL 喜欢

    /profile/user
    /cart/orders 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多