【发布时间】:2012-04-17 17:51:54
【问题描述】:
这个问题之前一定已经回答过了,但是我的 Google 电源今天关闭了,我一直在为这个问题苦苦挣扎。我们正在从旧的 PHP 基础迁移到基于 Jersey 的 JVM 堆栈,它最终将提供一个基于 JSON 的 RESTful API,可以在许多应用程序中使用。到目前为止,一切都非常好,我们喜欢简单的 POJO 到 JSON 的转换。但是,我们正在处理跨域 JSON 请求中的困难。我们基本上所有的响应都返回 JSON(使用 @Produces("application/json") 和 com.sun.jersey.api.json.POJOMappingFeature 设置为 true)但是为了支持 JSONP,我们需要更改我们的方法以返回一个JSONWithPadding 的实例。这当然也需要我们为每个方法添加一个@QueryParam("callback") 参数,这本质上会重复我们的工作,导致需要两个方法根据是否有回调参数来响应相同的数据在请求中。显然,这不是我们想要的。
所以我们基本上尝试了几个不同的选项。作为泽西岛的新手,我相信这个问题已经解决了。我从几个地方读到我可以编写请求过滤器或者我可以扩展 JSON Provider。我理想的解决方案是不对我们的数据或逻辑层产生影响,而是有一些代码说“如果有回调参数,则用回调包围 JSON,否则只返回 JSON”。在这里找到了一个解决方案: http://jersey.576304.n2.nabble.com/JsonP-without-using-JSONWithPadding-td7015082.html
但是,该解决方案扩展了 Jackson JSON 对象,而不是默认的 JSON 提供程序。
最佳做法是什么?如果我在正确的轨道上,我可以扩展的默认 JSON 过滤器的类是什么?是否需要任何额外的配置?我完全偏离轨道了吗?
【问题讨论】: