1

グリズリー Web サーバーで JSON を生成するのにかなりの時間を費やしました。

Intellij を使用して Maven アーキタイプから生成、詳細:

groupId untitled3
artifactId  untitled3
version 1.0-SNAPSHOT
archetypeGroupId    org.glassfish.jersey.archetypes
archetypeArtifactId jersey-quickstart-grizzly2
archetypeVersion    2.0-m05

すべてのオンライン例は、次を使用して JSON を有効にします

rc.put(JSONConfiguration.FEATURE_POJO_MAPPING, true);

ただし、これは jersey 2.x では機能せず、put メソッドは存在しません。

アプリケーションの Main クラスには、JSON を機能させるためにコード行のコメントを解除する手順があります。このコード行のコメントを外すと、使用されたメソッドが存在しません。

public static HttpServer startServer() {
    // create a resource config that scans for JAX-RS resources and providers
    // in untitled2 package
    final ResourceConfig rc = new ResourceConfig().packages("untitled2");

    // uncomment the following line if you want to enable
    // support for JSON on the service (you also have to uncomment
    // dependency on jersey-media-json module in pom.xml)
    // --
    rc.addModule(org.glassfish.jersey.media.json.JsonJaxbModule);

    // create and start a new instance of grizzly http server
    // exposing the Jersey application at BASE_URI
    return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}

POJO オブジェクトから JSON 応答を提供しようとすると、次のエラーが発生します。

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.example.JsonPost, genericType=class com.example.JsonPost.

どこから実際に見始めればよいかわかりません。私はグーグルで検索し、ドキュメントを調べ、ユーザーグループを調べました...

4

1 に答える 1

2

POM で依存関係のコメントを外してください。次に、addModule呼び出しを次のように変更します。

rc.addModules(new org.glassfish.jersey.media.json.JsonJaxbModule());

リソースに正しい@Produces注釈を含めるようにしてください。

@Produces(MediaType.APPLICATION_JSON)
于 2013-02-06T16:39:41.760 に答える