REST URL格式在Jersey中返回JSONP响应是否应该包含“/ jsonp”?

时间:2011-12-27 10:11:28

标签: jsonp jersey

如果必须使用Jersey实现JSONP,REST URL是否应包含 / jsonp

这是方法的泽西岛代码

@GET
@Path("/dates/jsonp")
@Produces("application/javascript")
public JSONWithPadding getCompetitionsByDate(
        @QueryParam("dateFrom") String dateFrom,
        @QueryParam("dateTo") String dateTo,
        @QueryParam("callback") String callback) {

    DateFormat df = new SimpleDateFormat("MMddyyyy");
    Date dateF = null;
    Date dateT = null;
    try {
        dateF = df.parse(dateFrom);
        dateT = df.parse(dateTo);
    } catch (ParseException parseExp) {
        return null;
    }
       List<Competition> competitions = context.getCompetitions(
            dateF, dateT);
    GenericEntity<List<Competition>> compGenericEntity = new GenericEntity<List<Competition>>(competitions) {};
    JSONWithPadding padding = new JSONWithPadding(compGenericEntity,
            callback);
    return padding;
}

当我在浏览器上部署并加载URL时,这将返回使用回调方法填充的正确JSON,但是当我将路径更改为@Path("/dates?enable=jsonp")时,它不起作用并返回XML的表示形式比赛。

我正在使用JSON 1.10,该应用程序部署在Glassfish 3.1.1上。

1 个答案:

答案 0 :(得分:1)

问:如果我必须使用Jersey实现JSONP,REST URL是否应该包含/ jsonp? a:不一定(可以包括,但不一定要)。

你的另一个问题是你将查询参数放入@Path值,这是不可能的;见http://jersey.java.net/nonav/apidocs/latest/jersey/javax/ws/rs/Path.html

你可以这样:

@GET
@Path("/dates")
@Produces("application/javascript")
public JSONWithPadding getCompetitionsByDate(
    @QueryParam("dateFrom") String dateFrom,
    @QueryParam("dateTo") String dateTo,
    @QueryParam("callback") String callback) {
    ...
}

@GET
@Path("/dates")
@Produces("application/xml")
public ... getCompetitionsByDate(
    @QueryParam("dateFrom") String dateFrom,
    @QueryParam("dateTo") String dateTo,
    @QueryParam("callback") String callback) {

    ...
}

并通过在您的请求中设置正确的“接受”标头来区分这些。