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应用程序。

  1. 不支持多个@Controllers中的相同相对路径
  2. @ExceptionHandler是以控制器为中心的
  3. 标准内容协商不能以固定响应类型响应(SPR-6937)
  4. JSR 303 beanvalidation未在@Controllers中应用(SPR-6928,计划用于3.1)
  5. 使用Spring格式化程序注释格式化响应(即日期)不起作用
  6. 您不能从exception处理程序返回一个bean,并期望它根据传入的accept头自动序列化为xml或json。

HTH …