如果必须使用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上。
答案 0 :(得分:1)
你的另一个问题是你将查询参数放入@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) {
...
}
并通过在您的请求中设置正确的“接受”标头来区分这些。