1

Jersey を使用して REST サービスを実装しています。ブラウザにJSONを表示したいのですが、代わりにXMLが表示されます。

@Path("/todos")
public class TodosResource {

// Allows to insert contextual objects into the class, 
// e.g. ServletContext, Request, Response, UriInfo
@Context
UriInfo uriInfo;
@Context
Request request;


// Return the list of todos to the user in the browser
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  public List<Todo> getTodosBrowser() {
  List<Todo> todos = new ArrayList<Todo>();
  todos.addAll(TodoDao.instance.getModel().values());
  return todos; 
}

私はあなたの助けに感謝します。

4

4 に答える 4

4

あなたのコードは、XML と JSON を生成すると述べています。ブラウザーの設定によっては、JSON ではなく XML を要求する場合があります。

まず、コードが実際に JSON を生成できることを確認します。MediaType.APPLICATION_XML@Produces アノテーションから を削除して、もう一度テストしてください。

それが機能する場合は、ブラウザーに JSON を要求するように指示する必要があります。Accept: application/jsonリクエスト ヘッダーに追加します。

これがどのように行われるかは、クライアント アプリケーションによって異なります。JavaScriptでは、これは次のようなものを追加することによって行われます

httpRequest.setRequestHeader('Accept', 'application/json'); 

使用するフレームワークによって異なります。curlコマンドラインでテストすることもできます

curl -H "Accept: application/json" http://yourhost/context/todos

ブラウザに URL を入力すると、次の Accept ヘッダーが送信される可能性が高くなります。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

ブラウザがユーザーに何かを表示したいからです(スタイル付きのhtml)。これが、MediaType.APPLICATION_XML が MediaType.APPLICATION_JSON よりも優先される理由です。

于 2013-03-13T11:06:25.853 に答える
0

追加jersey-json.jar

POJOMappingFeature を initparam として web.xml に追加すると、java リストが json 形式に自動的に変換されます。

<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>
于 2013-03-13T11:12:42.620 に答える