JAX-RS REST:基于MediaType参数

时间:2018-08-30 21:32:38

标签: rest annotations jax-rs versioning media-type

我有一个修正的MediaType +参数,我试图根据该参数路由HTTP请求。

@Path("/beer")

@GET
@Path("/all")
@Consumes("application/vnd.foo+json;type=boo/sth1")
@Produces("application/vnd.foo+json;type=koo/sth2")
Response getBeer();

@GET
@Path("{id}")
@Consumes("application/vnd.foo+json;type=woo/sth3")
@Produces("application/vnd.foo+json;type=hoo/sth4")
Response getBeer2();

我阅读了很多有关版本控制以及如何使用自定义MediaType的文章:

+json是可识别的MediaType,名称为JSON,因此,遵循此格式的任何接受标头都将被视为JSON

我发送了GET请求时 http:/localhost:8000/beer/11(应转到第二个GET方法)

使用

--header 'Accept: application/vnd.foo+json;type="koo/sth2"'(类型错误)

它以200给出了正确的响应(JSON格式), 并且Content-Typehoo/sth4。理想情况下,它应该返回406 not Acceptable,但是响应类型始终与所需的+json格式匹配,因此返回成功。

无论如何,我是否可以使type的值成为必填项? 搜索后,我有几个想法,但不确定是否可行:

1。创建默认的mediaType +实现MessageBodyWriter / Reader(基于JacksonJsonProvider)

但是以这种方式,我需要为每个特定的类型值实现MessageBodyWriter / Reader。 def不想这样做。

2。创建一个新注释,如果给定类型与此注释匹配,则将请求路由到该方法,例如

    @Request("woo/sth3")
    @Response("hoo/sth4")
    Response getBeer2();

在这种情况下,我应该重写RequestDispatcher / ResponseDispatcher之类的东西吗?

尽管这两种解决方案看起来都很丑陋,如果您对此有个好主意,请分享。

Udpate:

我将问题更具体地编辑,因此类型可以是"***/sth1"之后的任何形式,例如"boo.foo/sth1""keepoo/sth2"

0 个答案:

没有答案