我有一个共享的API和服务注释
@Produces({"application/json","application/x-jackson-smile"})
@Consumes({"application/json","application/x-jackson-smile"})
public class AServiceClass {
所以默认是JSON - 这在使用浏览器AJAX调用时是首选 .
但是我有一个我使用的RestEasy客户端
ProxyFactory.create(AServiceClass.class, url)
我希望这个客户端使用SMILE进行入站和出站通信 . 当然,它从@Consumes中选择第一项并尝试编组到JSON .
我正在使用RestEasy 2.3.5
如何强制客户端使用SMILE编组?
如何强制客户端接受SMILE而不是JSON?
3 回答
可以通过指定标头Accept的值来完成
事实上,事实证明你(我的意思是我:-)) can't do this .
检查MediaTypeHelper.getConsumes()表示选择始终 first 注释值以确定编组媒体类型 .
在确定接受标头时也会发生同样的情况 . 该代码使用MediaTypeHelper.getProduces()
您也可以使用
ClientRequestFilter
实现此功能,如果您使用的是JAX-RS注释类的代理,则更为实用 . 例如如果你正在使用Resteasy,你可以注册
ResteasyWebTarget
CXF或Jersey将允许您注册过滤器,但需要您以稍微不同的方式执行此操作 .