5

私のアプリケーションはREST(JAX-RSジャージー)インターフェースを使用しています。Eclipseで実行すると、すべて問題ありません。ドメインオブジェクトには注釈が付けられています。RESTマッピングにXMLファイルを使用していません。

ここで、maven-assembly-pluginを使用してスタンドアロンJARを作成しました。これにより、アプリケーションとすべての依存関係が単一の実行可能JARファイルにパックされます。これもうまくいくようです。

しかし、アプリケーションを起動してサーバーにオブジェクトを要求すると、Jerseyはメッセージ本文リーダーが見つからないと文句を言います。

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, class de.rybu.atuin.core.entity.User, and MIME media type, application/json, was not found

なぜこれが起こるのか考えはありますか?

編集:私がそれで一晩寝た後、私はそれがJSONについて不平を言っていることに気づきました...しかし私はシリアル化のためにXMLだけを使用しています。変。

4

5 に答える 5

3

私は同じ問題に遭遇し、stackoverflowを検索しましたが、このソリューションで提案されているようにjersery-json-1.x.jarをWEB-INF/libに追加 すると問題が解決することがわかりました。ミハイルに賞を与えてください!

于 2012-05-16T04:35:29.193 に答える
1

私は同様の問題に遭遇し(Eclipseから実行して正常に動作するか、実行可能jarからではなく、個別のjarとしてデプロイされました)、maven依存関係プラグインとmavenjarプラグインを使用して実行可能jarを作成するこのアプローチが正しく機能することを発見しました。これは、依存関係を別のlibディレクトリに配置し、それらをすべてマージして多数の問題を引き起こすのではなく、マニフェストのクラスパスに依存関係を含めるためです。

于 2012-05-09T01:59:04.433 に答える
1

私は問題を修正しました、そして私は方法を知っていると思います:-)

私のリソースには次のような注釈が付けられています。

@Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Path(CONTEXT_ADDRESS)
public class UserResource
{
}

私のクライアントは逆の順序を使用しました:

WebResource wr = ...
User user = wr.accept(MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_XML_TYPE).get(new GenericType<User>(){});

最初に問題が発生した原因はわかりませんが、JSONサポートを完全に削除して機能するようになりました。クライアントでJSONとXMLの順序を単純に切り替えるだけで十分だったかもしれませんが、私はそれを試しませんでした。

于 2010-04-29T09:55:10.433 に答える
1

同じ問題に直面しました(http://goo.gl/Mk9sZ)。jersey-multipart jarのmaven依存関係を1.0.2から1.8バージョンに変更することで解決しました(クライアント側とプロバイダー側​​で同じ依存関係を使用しました。

             <dependency>
                <groupId>com.sun.jersey.contribs</groupId>
                <artifactId>jersey-multipart</artifactId>
                <version>1.8</version>
             </dependency>

私が使用した完全なコードはhttp://goo.gl/Mk9sZで見つけることができます

于 2013-07-08T10:00:53.120 に答える
0

私はJerseyClient1を使用しており、この問題を解決するために、一般的なjsonメッセージ本文リーダーを作成しました。

public class JSONMessageBodyReader<T> implements MessageBodyReader<T> {

@Override
public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2,
        MediaType arg3) {
    return true;
}

@SuppressWarnings("unchecked")
@Override
public T readFrom(Class<T> clazz, Type type, Annotation[] arg2,
        MediaType arg3, MultivaluedMap<String, String> arg4,
        InputStream is) throws IOException, WebApplicationException {

    byte[] bytes = new byte[is.available()];
    is.read(bytes);
    String json = new String(bytes, "UTF-8");

    ObjectMapper mapper = new ObjectMapper();
    mapper.readValue(json, TypeFactory.defaultInstance().constructType(type));

    return (T) mapper.readValue(json, TypeFactory.defaultInstance().constructType(type));

}

}

于 2015-08-28T14:50:05.063 に答える