将PathSegment与@PathParam一起用于JAX-RS中的规范吗?

问题描述 投票:0回答:1

我正在学习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();
  }
}

(有时PathSegment改为List<PathSegment>,但现在不相关。)当重现示例时,Eclipse抛出一个错误,告诉我:

类型'javax.ws.rs.core.PathSegment'对于此参数无效。有关更多信息,请参见JAX-RS 2.0规范(第3.2节)。

我查阅了所讨论的规范,的确证实了这一点。 PathSegment是既没有valueOf也没有fromString的接口。没有一个示例提供ParamConverterProvider

以上每个注释的有效参数类型在相应的Javadoc中列出,但是在常规(不包括@Context),支持以下类型:1.通过注册的ParamConverter可使用ParamConverterProvider的类型。看到有关这些类的Javadoc,请参见更多信息。2.原始类型。3.具有接受单个String参数的构造函数的类型。4.具有名为valueOffromString且带有单个String参数的静态方法的类型返回该类型的实例。如果同时存在这两种方法,则必须使用valueOf,除非该类型是一个枚举,在这种情况下必须使用fromString。5. List<T>Set<T>SortedSet<T>,其中T满足以上1、3或4。

这与JavaEE规范相反,JavaEE规范也允许PathSegment as shown here作为有效类型。有人可以向我解释当违反JAX-RS规范时,所有这些JAX-RS示例到底如何使用PathSegment?我无法想象这是一个简单的错误,因为它过于广泛,而且我还没有看到任何抱怨他们的示例无效的评论。

编辑:我确定使用mvn install时确实可以构建一些更完整的示例,但使用Eclipse时却没有。这使我相信,使用JAX-RS本身可能要做的更少,而使用某些Eclipse设置则需要做更多的事情。但是,我迷住了要看的地方,甚至更加困惑-为什么在不符合JAX-RS规范的情况下构建示例?

java eclipse java-ee jax-rs
1个回答
0
投票

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

以上每个注释的有效参数类型在对应的Javadoc中列出,但是通常(@ Context除外)支持以下类型:...

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

© www.soinside.com 2019 - 2024. All rights reserved.