小编Arn*_*rno的帖子

在开发jax-rs应用程序时如何处理accept-parameters

为了处理内容类型的不同版本,我试图使用"Accept*"标头的接受参数(RFC 2616).

Accept: application/vnd.mycompany.mytype;version=2 , application/vnd.mycompany.mytype;version=1;q=0.1
Run Code Online (Sandbox Code Playgroud)

问题是Jax-RS注释不支持Accept-parameters ...

@GET
@Produces("application/vnd.test;version=1")
public Response test1() {
    return Response.ok("Version 1", "application/vnd.test").build();
}

@GET
@Produces("application/vnd.test;version=2")
public Response test2() {
    return Response.ok("Version 2", "application/vnd.test").build();
}
Run Code Online (Sandbox Code Playgroud)

导致媒体类型冲突异常:

Producing media type conflict. The resource methods public javax.ws.rs.core.Response test.resources.TestResource.test2() and public javax.ws.rs.core.Response test.resources.TestResource.test1() can produce the same media type
Run Code Online (Sandbox Code Playgroud)

也许,这个例外只与我的JAX-RS框架(Jersey)有关,但我担心这是由于JSR311没有明确的接受参数.

到目前为止,我正在使用内容类型,其中包含其名称中的版本,但我发现这个解决方案非常流畅.

@GET
@Produces("application/vnd.test-v1")
public Response test() {
    return Response.ok("Version 1", "application/vnd.test-v1").build();
}
Run Code Online (Sandbox Code Playgroud)

您对如何处理接受参数有任何想法吗?

编辑

我想我还不够清楚.我想自动将请求路由到特定方法.这些方法是版本化的,并且对应于返回的内容类型的特定版本.JAX-RS当前实现阻止我使用accept-parameters来路由请求(到相应的方法).

greenkode建议我version在调度方法(使用@HeaderParam("Accept"))中管理accept-parameter .该解决方案最终将重写内容解析逻辑,该逻辑嵌入框架中(并在JSR 311中描述).

如何使用JAX-RS的accept-parameter和content-negociation逻辑呢?

也许解决方案是使用另一个框架(我只使用Jersey …

java rest jax-rs

10
推荐指数
1
解决办法
7578
查看次数

说服我从YUI 2切换到YUI 3

我一直在使用YUI Library来开发网站.YUI 3于9月问世.

我仍然不相信我是否必须为迁移做好准备.

第二版有什么优势?

你最近参与过这样的迁移吗?

javascript yui

6
推荐指数
1
解决办法
1271
查看次数

标签 统计

java ×1

javascript ×1

jax-rs ×1

rest ×1

yui ×1