【问题标题】:Using PathSegment with @PathParam against specifications in JAX-RS?根据 JAX-RS 中的规范使用带有 @PathParam 的 PathSegment?
【发布时间】:2020-04-12 23:28:06
【问题描述】:

我正在学习 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("text/plain")
public class MinimalExample
{
  @GET
  @Path("/b/{file}")
  public String readFile2(@PathParam("file") List<PathSegment> fileParam)
  {
    return fileParam.toString();
  }
}

(有时PathSegmentList&lt;PathSegment&gt;,但现在不相关。) 复制示例 Eclipse 时抛出错误,告诉我:

“javax.ws.rs.core.PathSegment”类型对此参数无效。有关详细信息,请参阅 JAX-RS 2.0 规范(第 3.2 节)。

我查看了有问题的规范,确实证实了这一点。 PathSegment 是一个既没有valueOf 也没有fromString 的接口。这些示例都没有提供ParamConverterProvider

上述每个注解的有效参数类型都列在相应的 Javadoc 中,但是在 一般(不包括@Context)支持以下类型:
1. 可通过注册的ParamConverterProvider 获得ParamConverter 的类型。看 这些类的 Javadoc 以获取更多信息。 2. 原始类型。
3. 具有接受单个 String 参数的构造函数的类型。
4. 具有名为valueOffromString 的静态方法和单个String 参数的类型 返回该类型的实例。如果两种方法都存在,则必须使用valueOf,除非 类型是枚举,在这种情况下必须使用fromString
5.List&lt;T&gt;Set&lt;T&gt;SortedSet&lt;T&gt;,其中T满足上述1、3或4。

这与 JavaEE 规范相反,JavaEE 规范也允许 PathSegment as shown here 作为有效类型。
有人可以向我解释一下所有这些 JAX-RS 示例在违反 JAX-RS 规范时是如何使用 PathSegment 的吗?我无法想象这是一个简单的错误,因为它太普遍了,而且我还没有看到任何 cmets 抱怨他们的示例不起作用。

编辑:我已经确定一些更完整的示例在使用mvn install 时确实会构建,但在使用 Eclipse 时不会。这让我相信它可能需要对 JAX-RS 本身做更少的事情,而对我的一些 Eclipse 设置做更多的事情。但是,我不知道在哪里看,甚至更困惑 - 为什么在不符合 JAX-RS 规范的情况下构建示例?

【问题讨论】:

  • 如果您在 Eclipse 中的构建时收到此错误,那只是因为您有一些 Eclipse 插件或附加检查误导了您。 Java 编译器不可能进行这样的检查。
  • 你是对的,错误不是构建停止,似乎是 JBoss 插件的 JAX-RS-Validator 中的疏忽。

标签: java eclipse jakarta-ee jax-rs


【解决方案1】:

我应该更仔细地阅读我自己的报价(强调我的):

上述每个注解的有效参数类型都列在对应的Javadoc中,但是一般(不包括@Context)支持以下类型:
...

检查 Javadoc 后,我确认 @PathParam 确实允许 PathSegment 作为类型。 错误本身似乎来自 JBoss Eclipse 插件的 JAX-RS-Validator。 最新版本的插件不会显示错误。

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多