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からのみ実行されるため)アップグレードできません。
何か案が?
ありがとうございました