Java 根据JAX-RS中的规范使用带有@PathParam的PathSegment?
我正在学习JAX-RS。在阅读JAX-RS和相关书籍的同时,我多次阅读以下示例:Java 根据JAX-RS中的规范使用带有@PathParam的PathSegment?,java,eclipse,jakarta-ee,jax-rs,Java,Eclipse,Jakarta Ee,Jax Rs,我正在学习JAX-RS。在阅读JAX-RS和相关书籍的同时,我多次阅读以下示例: import javax.ejb.Stateless; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.PathSegment; @Path("/read") @Stateless @Produces
import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.PathSegment;
@Path("/read")
@Stateless
@Produces("text/plain")
public class MinimalExample
{
@GET
@Path("/b/{file}")
public String readFile2(@PathParam("file") List<PathSegment> fileParam)
{
return fileParam.toString();
}
}
import javax.ejb.Stateless;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
导入javax.ws.rs.core.PathSegment;
@路径(“/read”)
@无国籍
@生成(“文本/纯文本”)
公共类示例
{
@得到
@路径(“/b/{file}”)
公共字符串readFile2(@PathParam(“文件”)列表fileParam)
{
返回fileParam.toString();
}
}
(有时路径段
是一个列表
,但现在不相关。)
复制示例时,Eclipse抛出一个错误,告诉我:
类型“javax.ws.rs.core.PathSegment”对此参数无效。有关更多信息,请参阅JAX-RS 2.0规范(第3.2节)
我查阅了有问题的规范,事实上,它证实了这一点PathSegment
是一个既没有valueOf
也没有fromString
的接口。所有示例均未提供ParamConverterProvider
对应的Javadoc中列出了上述每个注释的有效参数类型,但是
常规(不包括@Context)支持以下类型:1.可通过注册的
ParamConverterProvider
获得ParamConverter
的类型。看见
有关更多信息,请参阅这些类的Javadoc。
2.基本类型。3.具有接受单个
字符串参数的构造函数的类型。
4.具有名为valueOf
或fromString
的静态方法并带有单个String
参数的类型
返回该类型的实例。如果两种方法都存在,则必须使用valueOf
,除非
类型是枚举,在这种情况下必须使用fromString
。
5. <代码>列表
,集合
,或分类数据集
,其中T
满足上述1、3或4
这与JavaEE规范不同,JavaEE规范也允许PathSegment作为有效类型。
有人能向我解释一下,当PathSegment违反JAX-RS规范时,这些JAX-RS示例究竟是如何使用的吗?我不能想象这是一个简单的错误,因为它太普遍了,我还没有看到任何评论抱怨他们的例子不起作用
编辑:我已经确定一些更完整的示例实际上是在使用mvn安装时生成的,而不是在使用Eclipse时生成的。这让我相信它可能需要更少地使用JAX-RS本身,而更多地使用我的一些Eclipse设置。然而,我很困惑到底应该在哪里查找,甚至更困惑-为什么这些示例在构建时不符合JAX-RS规范?我应该更仔细地阅读我自己的引用(我的重点):
上述每种注释的有效参数类型都列在相应的Javadoc中,但是通常支持以下类型:
检查Javadoc后,我确认@PathParam
确实允许将路径段
作为一种类型。
错误本身似乎来自JBossEclipse插件的JAX RS验证程序。
插件的最新版本不会显示错误。我应该更仔细地阅读我自己的引用(强调我的):
上述每种注释的有效参数类型都列在相应的Javadoc中,但是通常支持以下类型:
检查Javadoc后,我确认@PathParam
确实允许将路径段
作为一种类型。
错误本身似乎来自JBossEclipse插件的JAX RS验证程序。
插件的最新版本不会显示错误。如果您在Eclipse中构建时出现此错误,那么只是您有一些Eclipse插件或附加检查误导了您。Java编译器不可能进行这样的检查。你是对的,这个错误不是构建停止,似乎是JBoss插件的JAX RS验证程序中的一个疏忽。如果你在Eclipse中构建时遇到这个错误,那么只是你有一些Eclipse插件或附加检查误导了你。Java编译器不可能进行这样的检查。您是对的,错误不是构建停止,而是JBoss插件的JAX RS验证程序中的一个疏忽。