Spring Restfull Jax-RS注释支持
我有以下class和web.xml文件。 spring框架是否支持jax-rs注释,例如@PATH
, @PATH
@PUT
, @PATH
@Consumes
……等。
换句话说,我可以使用@PATH
代替@RequestMapping
Java的:
import org.springframework.stereotype.Controller; import javax.ws.rs.PUT; import javax.ws.rs.Path; @Controller @Path("/register") public class RegisterServices { @PUT @Path("/create") @Consumes(MediaType.APPLICATION_JSON) @Produces({"application/json"}) public Response create(@Context HttpServletRequest requestContex, @HeaderParam("Authorization") String authorization, String xMsisdn, String param) {} }
web.xml中
org.springframework.web.context.ContextLoaderListener Jersey REST Service /rest/* Jersey REST Service org.springframework.web.servlet.DispatcherServlet 1
不,你不能在spring使用javax.ws.*
注释。 你可以使用像弹簧一样的resteasy
。 这很容易。 如果您需要我可以提供一个例子。 (Jersey和CXF也有很好的JAX-RS实现。)
AFAIK Springsource不知道为JAX-RS提供实现。 因此,如果您想使用JAX-RS中描述的function,您将无法直接从spring获得它。 但您可以使用spring开发restWeb服务。 那是一个不同的故事。 在这方面发现了一个问题 。
更新
根据PaulNUK的答案,我需要澄清我的答案。 rest日结束是一个规范,有人需要首先实现它。
问题清楚地问,我们是否可以替换注释,你不能这样做 ,除非你在类路径中添加像Jersey这样的外部依赖。 该案例实施由泽西岛提供。
因此,您永远无法使用弹簧实现的JAX-RS注释。
只需将JAX-RS(我使用Jersey 2)注释放在类上,使用@Component注释该类以使其成为Spring bean,并且您可以使用Springdependency injection获得完整的JAX-RS支持。
所以Spring并没有通过实现JAX-RS本身来重新发明轮子,但是很容易与Jersey集成。
这是一个简单的Spring启动示例:
http://spring.io/blog/2014/11/23/bootiful-java-ee-support-in-spring-boot-1-2
如果您只想使用Spring框架开发Web服务,那么Spring提供了Spring MVC。 Spring MVC有自己的一组注释。 例如“@RequestMapping”。 Spring MVC甚至不遵守JAX-RS原则。
有各种开源框架(如Jersey)支持“JAX-RS”,可以与Spring集成。
但是,如果你想比较Spring MVC和Jersey,那么下面是比较。 我个人支持Jersey而不是SPring MVC,因为Spring MVC最初不是用于web服务而是用于UI应用程序。
- 不支持多个@Controllers中的相同相对路径
- @ExceptionHandler是以控制器为中心的
- 标准内容协商不能以固定响应类型响应(SPR-6937)
- JSR 303 beanvalidation未在@Controllers中应用(SPR-6928,计划用于3.1)
- 使用Spring格式化程序注释格式化响应(即日期)不起作用
- 您不能从exception处理程序返回一个bean,并期望它根据传入的accept头自动序列化为xml或json。
HTH …