0

jersey-server、jersey-json、jersey-spring で jersey 1.2 を使用して REST サービスを作成しています。

私のサービスの一つ

@Path("test")
public class TestViewRestController {

@GET
@Path("t1")
@Produces(MediaType.APPLICATION_JSON)
public RetPojo getPojo(
        @QueryParam("token") @DefaultValue("null") String token, 
        @QueryParam("pojo") ParamPojo pojo, 
        @QueryParam("param2") @DefaultValue("null") String param2
        ) {
       //do some stuff
}

}

Provider を作成しました:

@Provider
@Consumes(MediaType.APPLICATION_JSON)
public class MessageBodyReaderJSON implements MessageBodyReader<APojo> {

/**
 * {@inheritDoc}
 */
public boolean isReadable(Class<?> type, Type genericType,
        Annotation[] annotations, MediaType mediaType) {
    return true;
}

/**
 * {@inheritDoc}
 */
public APojo readFrom(Class<APojo> type, Type genericType,
        Annotation[] annotations, MediaType mediaType,
        MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
        throws IOException {

    APojo p = new ObjectMapper().readValue(entityStream, APojo.class);

    return p;
    }
}

しかし、Web サーバーを起動すると、次の例外がスローされます。

com.sun.jersey.api.container.ContainerException: 
Method, public my.package.TestViewRestController.getPojo( java.lang.String, my.package.APojo, java.lang.String), 
annotated with GET of resource, class my.package.TestViewRestController, 
is not recognized as valid Java method annotated with @HttpMethod.

APojo パラメータを String に置き換えると、機能します。プロバイダーが無視されているようです。

ジャージーの最後のバージョンでは問題は発生しませんが(プロバイダーを宣言する必要もありませんでした)、アプリをJava 5で実行する必要があるため(最後のジャージーはJava 6からのみ実行されるため)アップグレードできません。

何か案が?

ありがとうございました

4

1 に答える 1

0

単純なスカラー値だけで、構造化された POJO をクエリ パラメータで使用できるとは思いませんか? 構造化された値は通常、PUT/POST ペイロードとして (JSON または XML で) 送信されます。

于 2012-12-10T19:53:11.140 に答える