0

POJO で REST 呼び出しをマップしようとしています。POJO は次のようになります。

public class ResultWrapper implements Serializable{

  private int total;
  private List<Movies> movies; ... getters and setters

私が使用する呼び出しで:

WebResource webResource = client.resource(RequestURI + URLEncoder.encode(movie, "UTF-8"));

ResultWrapper result = webResource.accept("application/json").get(ResultWrapper.class);

エラー:

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class models.ResultWrapper, and Java type class models.ResultWrapper, and MIME media type text/javascript; charset=ISO-8859-1 was not found

クライアントはジャージー クライアントです。Chrome (Postman) から呼び出しを試みましたが、返されるアプリケーションの種類は「application/json」ではなく「text/javascript」であると表示されます。それが私の問題になると思います。

ObjectMapper を取得して、実際には「text/javascript」ではなく「application/json」であることを解決する方法はありますか? String.class を使用してみましたが、Json オブジェクトをうまく取得できました。

私の目的は、Jersey Client からの自動マッピングを使用することです。

ヒントやアドバイスをありがとう。

4

2 に答える 2

2

注釈を追加してみてください@Produces (MediaType.APPLICATION_JSON )

于 2014-01-08T11:23:11.987 に答える
0

これを試すことができます:

@Provider
@Produces(application/json)
public class YourTestBodyWriter implements MessageBodyWriter<ResultWrapper> {

    private static final Logger LOG = LoggerFactory.getLogger(YourTestBodyWriter.class);

    @Override
    public boolean isWriteable(
        Class<?> type,
        Type genericType,
        Annotation[] annotations,
        MediaType mediaType)
    {
        return ResultWrapper.class.isAssignableFrom(type);
    }

    @Override
    public long getSize(
        ResultWrapper t,
        Class<?> type,
        Type genericType,
        Annotation[] annotations,
        MediaType mediaType)
    {
        return -1;
    }

    @Override
    public void writeTo(
        ResultWrapper t,
        Class<?> type,
        Type genericType,
        Annotation[] annotations,
        MediaType mediaType,
        MultivaluedMap<String, Object> httpHeaders,
        OutputStream entityStream) throws IOException, WebApplicationException
    {
        String message = t.someMethod()
        entityStream.write(message.getBytes(Charsets.UTF_8));
        LOG.info(message);
    }

}

アプリの run() に追加します。

// Serializer
environment.jersey().register(new YourTestBodyWriter ());   

これは、アプリケーションの通常の方法です。

于 2014-10-31T08:48:49.503 に答える