Spring & Restlet:100% XML 配置?
Spring & Restlet : 100% XML configuration?
我正在开发一个项目,所有配置都保存在 XML 文件中。我即将开始这个项目的一小部分,为此我将使用 Restlet。基本上,我想做的是创建 ServerResource
.
的几个子 classes
我可以使用注释来指定哪些 class 方法接受哪些 HTTP 方法,但由于我对其他所有内容都使用 XML,所以我有点不情愿。有没有办法将 HTTP 方法映射到 Restlet 资源的 class 方法?
Spring 和 Restlet 之间的实际集成仅为 XML (webcontext.xml):
<bean id="apiComponent" class="org.restlet.ext.spring.SpringComponent">
<property name="defaultTarget" ref="apiAppliction" />
</bean>
<bean id="apiAppliction" class="com.company.api.ApiApplication">
<property name="inboundRoot" ref="router" />
</bean>
<!-- Define the router -->
<bean name="router" class="org.restlet.ext.spring.SpringBeanRouter" />
<!-- Define all the routes -->
<bean name="/track/{trackId}" class="com.company.api.resource.TrackResource" scope="prototype" autowire="byName">
<constructor-arg index="0" ref="serviceFactory"/>
</bean>
<bean name="/album" class="com.company.api.resource.AlbumResource" scope="prototype" autowire="byName"/>
<bean name="/album/{albumId}/tracks" class="com.company.api.resource.AlbumTracksResource" scope="prototype" autowire="byName" />
有没有办法可以添加到上述配置并将 HTTP 方法映射到 class 方法?
事实上,没有。您不能使用 Restlet 本身和 Spring 配置定义 HTTP 方法和目标服务器资源方法之间的映射。
事实上,这是 Restlet 的两个不同的部分:
- 定义处理请求的路由(身份验证、过滤器、服务器资源等)。这是在方法
createInboundRoot
中的 Restlet 应用程序 class 中完成的(您的 属性 inboundRoot
用于您的 bean apiAppliction
)。
- HTTP 方法循环的定义。一旦选择了要使用的服务器资源,就会在服务器资源内部明确地完成(在方法
handleRequest
中进行测试)或使用注释。
事实上,你和Spring MVC有同样的事情。您定义检测 Spring 容器中控制器的方式(例如基于注释 Controller
的自动检测),然后使用专用注释配置您的控制器。
此外,Roger Stocker 提供了基于 XML 命名空间的 Spring 扩展的改进(参见此 link http://code4you.org/2013/07/spring-custom-xml-namespace-scheme-for-the-restlet-framework/)。此贡献目前正在孵化中,以集成到官方 Spring 扩展中。
希望对您有所帮助,
蒂埃里
我正在开发一个项目,所有配置都保存在 XML 文件中。我即将开始这个项目的一小部分,为此我将使用 Restlet。基本上,我想做的是创建 ServerResource
.
我可以使用注释来指定哪些 class 方法接受哪些 HTTP 方法,但由于我对其他所有内容都使用 XML,所以我有点不情愿。有没有办法将 HTTP 方法映射到 Restlet 资源的 class 方法?
Spring 和 Restlet 之间的实际集成仅为 XML (webcontext.xml):
<bean id="apiComponent" class="org.restlet.ext.spring.SpringComponent">
<property name="defaultTarget" ref="apiAppliction" />
</bean>
<bean id="apiAppliction" class="com.company.api.ApiApplication">
<property name="inboundRoot" ref="router" />
</bean>
<!-- Define the router -->
<bean name="router" class="org.restlet.ext.spring.SpringBeanRouter" />
<!-- Define all the routes -->
<bean name="/track/{trackId}" class="com.company.api.resource.TrackResource" scope="prototype" autowire="byName">
<constructor-arg index="0" ref="serviceFactory"/>
</bean>
<bean name="/album" class="com.company.api.resource.AlbumResource" scope="prototype" autowire="byName"/>
<bean name="/album/{albumId}/tracks" class="com.company.api.resource.AlbumTracksResource" scope="prototype" autowire="byName" />
有没有办法可以添加到上述配置并将 HTTP 方法映射到 class 方法?
事实上,没有。您不能使用 Restlet 本身和 Spring 配置定义 HTTP 方法和目标服务器资源方法之间的映射。
事实上,这是 Restlet 的两个不同的部分:
- 定义处理请求的路由(身份验证、过滤器、服务器资源等)。这是在方法
createInboundRoot
中的 Restlet 应用程序 class 中完成的(您的 属性inboundRoot
用于您的 beanapiAppliction
)。 - HTTP 方法循环的定义。一旦选择了要使用的服务器资源,就会在服务器资源内部明确地完成(在方法
handleRequest
中进行测试)或使用注释。
事实上,你和Spring MVC有同样的事情。您定义检测 Spring 容器中控制器的方式(例如基于注释 Controller
的自动检测),然后使用专用注释配置您的控制器。
此外,Roger Stocker 提供了基于 XML 命名空间的 Spring 扩展的改进(参见此 link http://code4you.org/2013/07/spring-custom-xml-namespace-scheme-for-the-restlet-framework/)。此贡献目前正在孵化中,以集成到官方 Spring 扩展中。
希望对您有所帮助, 蒂埃里