Spring Restful Jax-RS注释支持

时间:2014-08-28 08:00:10

标签: java spring rest jax-rs

我有以下类和web.xml文件。 Spring框架是否支持jax-rs注释,例如@PATH@PUT@Consumes等等。

换句话说,我可以使用@PATH代替@RequestMapping

爪哇:

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

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

3 个答案:

答案 0 :(得分:11)

不,你不能在春天使用javax.ws.*注释。你可以使用像resteasy这样的东西和spring。这很容易。如果您需要我可以提供一个例子。 (Jersey和CXF也有很好的JAX-RS实现。)

AFAIK Springsource不知道为JAX-RS提供实现。因此,如果您想使用JAX-RS中描述的功能,您将无法直接从spring获得它。但是您可以使用spring开发休息Web服务。那是一个不同的故事。在那上面找到了question

更新

根据PaulNUK的答案,我需要澄清我的答案。休息日结束是一个规范,有人需要首先实现它。

问题清楚地问道,我们是否可以替换注释,你不能这样做,除非你在你的类路径中添加像 Jersey这样的外部依赖。该案例实施由泽西岛提供。

因此,您永远无法使用弹簧实现的JAX-RS注释。

答案 1 :(得分:6)

只需将JAX-RS(我使用Jersey 2)注释放在类上,使用@Component注释该类以使其成为Spring bean,并且您具有Spring依赖注入的完整JAX-RS支持。

所以Spring并没有通过实现JAX-RS本身来重新发明轮子,但是很容易与Jersey集成。

这是一个简单的Spring启动示例:

http://spring.io/blog/2014/11/23/bootiful-java-ee-support-in-spring-boot-1-2

答案 2 :(得分:3)

如果您只想使用Spring框架开发Web服务,那么Spring提供了Spring MVC。 Spring MVC有自己的一组注释。对于例如“@RequestMapping”。 Spring MVC甚至不遵守JAX-RS原则。

有各种开源框架(如泽西岛)支持“JAX-RS”,可以与Spring集成。

但是,如果你想比较Spring MVC和Jersey,那么下面是比较。我个人支持Jersey而不是SPring MVC,因为Spring MVC最初不是用于web服务而是用于UI应用程序。

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