Должен ли формат REST URL возвращать ответ JSONP в Джерси всегда включать "/ jsonp"? - PullRequest
0 голосов
/ 27 декабря 2011

Должен ли REST URL включать / jsonp , если мне нужно реализовать 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 Ответ

1 голос
/ 04 января 2012

q: должен ли REST URL включать / jsonp, если мне нужно реализовать JSONP с использованием Jersey? 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) {

    ...
}

и различайте их, задав правильный заголовок "accept" в вашем запросе.

...