我有以下类和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>
答案 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应用程序。
... HTH