我的应用程序有2个MessageBodyWriters:
RestEasy正确将MBW1用于以下接受标头值:
但是,它选择MBW2作为以下accept-header值:
我希望仅当没有其他MBW可以提供客户端可接受的功能时才选择MBW2。但是,即使MBW1产生的具体类型确实可以被客户接受,似乎还是选择了MBW2。我没有看到RestEsays返回带有4和5的值/具体值的理由,但是当客户端添加其他不受支持的格式时(6)却没有。这是JAX-RS规范还是RestEasy的问题?
答案 0 :(得分:0)
按照JAX-RS规范的第3.8节,并假设JAX-RS资源方法和类没有@Produces批注,并且两个MessageBodyWriters支持我们在设置的步骤2中返回的实体对象的类
P = {"something/concrete; qs=0.6", "*/*; qs=0.01"}
这是我们设置的第4步
A = {"something/unsupported","*/*; q=0.99"}
通过在步骤5中组合P和A中的值,我们进行设置
M = {"something/unsupported; qs=0.01", "something/concrete; q=0.99; qs=0.6", "*/*; q=0.99; qs=0.01"}
在步骤7 M中,假定/不支持的事物的隐式q值为1,则排序如下:
M = {"something/unsupported; q=1; qs=0.01", "something/concrete; q=0.99; qs=0.6", "*/*; q=0.99; qs=0.01"}
在步骤8 something/unsupported
中,选择响应的媒体类型,然后选择MBW2。
因此,这似乎是JAX-RS规范的问题,因为q并不用于表示质量,而当q值相同时,它只是第三级排序因子。
这里提议将其更改为JAX-RS,以实现更灵活的内容协商:https://github.com/factsmission/jax-rs-spec/