2011-12-27 2 views
0

Jerseyを使用してJSONPを実装する必要がある場合は、REST URLに/jsonpを含める必要がありますか?JerseyのJSONPレスポンスを返すREST URL形式には常に "/ jsonp"が含まれていますか?

は、ここに私が展開し、ブラウザでURLをロードすると

@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; 
} 

は、これが正しいJSON、コールバックメソッドで埋め返すメソッドのための私のジャージーコードですが、私は@Path("/dates?enable=jsonp")へのパスを変更すると、それは動作しませんし、コンテストのXML表現を返します。

私はJSON 1.10を使用しており、このアプリケーションはGlassfish 3.1.1にデプロイされています。

答えて

1

q: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) { 

    ... 
} 

をし、あなたの要求にヘッダーを「受け入れる」の適切な設定により、これらの区別。

+0

私はあなたのコメントを「他の問題はパスの値にクエリのパラメータを入れているということです」と理解していませんでした。密接に見ると、クエリパラメータを個別に指定するわけではありません。違いは私の@Pathには値として( "/ dates/jsonp")があります。私が間違っているところを指摘できますか? –

+0

あなたの段落をコピーする: ""ブラウザにURLを展開してロードすると、コールバックメソッドで埋め込まれた正しいJSONが返されますが、パスを@Path( "/ dates?enable = jsonp")に変更すると、コンテストのXML表現を返します」「 –

+0

ああ、私はそれが変更されないので、パスに入れることができると思いました。ありがとう、私はあなたに知らせるでしょう –

関連する問題