我正在尝试了解 Java 中的一些概念:
- JSR(s):描述规范,但不包含实际实现。例如。 http://jsr311.java.net/是“Java™ API for RESTful Web Services”的“家”。它作为所有 JSR-311 实现的通用引用。
- 可以从 http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api 下载 JSR-311 的接口(interface)(?) ,但是,除非您自己实现 JSR-311,否则这些没有特别的值(value)?
- JSR(s) 通常/总是有一个引用实现。要找到它,您必须用谷歌搜索“JSR XXX 引用实现”或查看规范主页(例如 http://jsr311.java.net/)
- 对于 JSR-311,此引用实现是 Jersey .使用 maven 你可以从 http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9 得到 Jersey 服务器.自从 Jersey 根据 http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api 中的接口(interface)提供了一个实现。 ,您只需要将 Jersey 添加为项目中的依赖项,而不是 jsr311-api 本身。 (这适用于所有 JSR 技术?)
- 将两个http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api和 http://mvnrepository.com/artifact/com.sun.jersey/jersey-server/1.9因为项目中的依赖项可能会导致类路径问题?
我是完全离开还是进入某事?
最佳答案
是的,这不是什么新鲜事。想想JDBC,java提供了 接口(interface)(
Connection
、Statement
、ResultSet
等)但它已启动 数据库供应商提供实现。如果您使用的是 JSR-311 实现,例如 Jersey 或 Apache CXF 然后您将使用
javax.ws.rs
注释来注释您的类,例如@Path
、@GET
、@Produces
等。这就是为什么您需要明确地将 JSR-311 作为 Maven 依赖项。是的,通常。看看 JSR list on wiki .
您需要 JSR 和实现。注解在JSR中,实现提供支持类,如
com.sun.jersey.spi.container.servlet.ServletContainer
。不,有必要将两者都作为依赖项(参见第 4 点);你不会遇到类路径冲突。
关于java - 与 Jersey 和 JSR 相关的 JAX-RS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476820/