エラーが発生した場合に200以外の応答を有効にするために、Jerseyのドキュメントに従おうとしています( https://jersey.Java.net/documentation/latest/representations.html#d0e3586 )
私のコードは次のようになります:
@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public ResponseBuilder getData(@FormParam("one") String one,@FormParam("two") String two,@FormParam("three") String three) {
if(one.isEmpty() || two.isEmpty() || three.isEmpty()) {
logger.error("Missing params for getData");
throw new WebApplicationException(501);
}
return Response.ok();
}
}
残念ながら、これにより次のエラーが発生します。
[2015-02-01T16:13:02.157 + 0000] [glassfish 4.1] [SEVERE] [] [org.glassfish.jersey.message.internal.WriterInterceptorExecutor] [tid:_ThreadID = 27 _ThreadName = http-listener-1(2 )] [timeMillis:1422807182157] [levelValue:1000] [[MessageBodyWriter not found for media type = text/plain、type = class org.glassfish.jersey.message.internal.OutboundJaxrsResponse $ Builder、genericType = class javax.ws.rs .core.Response $ ResponseBuilder。]]
問題は、メソッドの戻り値の型です。 Response
ではなくResponseBuilder
である必要があります。
コードを次のように変更すると、機能するはずです。
@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response getData(@FormParam("one") String one,@FormParam("two") String two,@FormParam("three") String three) {
if(one.isEmpty() || two.isEmpty() || three.isEmpty()) {
logger.error("Missing params for getData");
throw new WebApplicationException(501);
}
return Response.ok();
}