在Dropwizard中序列化JSONP / JSONPObject

时间:2015-12-16 23:52:01

标签: json jersey jackson dropwizard

我能够毫无问题地在我的Dropwizard资源中返回JSON响应。但是当我尝试返回一个JSONPObject时,响应仍然返回一个JSON,而不是请求的回调函数中包含的JSON。

@Path("/results")
@Produces(MediaType.APPLICATION_JSON)
public class ExperimentResultResource {

    ...

    @Path("results/{experimentId}")
    @GET
    @Timed
    public Object getResults(
            @PathParam("experimentId") @NotEmpty long experimentId,
            @QueryParam("callback") String callback) {

        ....
        ExperimentResultRepresentation representation = dataSource.queryResults(query);
        if (callback != null) {
            JSONPObject obj = new JSONPObject(callback, representation);
            return obj;
        }
        return representation;
    }

好消息是,它确实包含了JSON正文中的serializationTypefunction元素,而不是吐出原始的JSON:

{
    "value": { // the original JSON body }
    "serializationType": null,
    "function": "jQuery17209002291325014085_1450240336024"
}

我也尝试在方法上面加上@JSONP注释。也没有运气。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

解决。

使用org.codehaus.jackson.map.util.JSONPObject代替protected function selectModule($module = NULL) { $this->module = $module; $this->module = strtolower($this->module); $this->byID($this->module)->click(); $this->assertEquals($this->url(SOMECONSTANTEXPECTEDURL), $this->byXpath('/html/head/base')->text()); fwrite(STDERR, print_r(__METHOD__."()->$this->module method completed.".PHP_EOL, TRUE)); return $this; }