web-dev-qa-db-ja.com

メディアタイプ=テキスト/プレーンのJerseyMessageBodyWriterが見つかりません

エラーが発生した場合に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。]]

9
Little Code

問題は、メソッドの戻り値の型です。 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();
}
7
unwichtich