LibertyでJAX-RS 2.0を使用して、のようなさまざまなjavax.ws.rs.WebApplicationException
サブクラスのカスタム例外処理を実装したいと思います。LibertyのNotAllowedExceptionのExceptionMapper
私はExceptionMapper
実装作成しました:
import javax.ws.rs.NotAllowedException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@Provider
public class NotAllowedMapper implements ExceptionMapper<NotAllowedException> {
@Override
public Response toResponse(NotAllowedException e) {
return Response.status(Response.Status.METHOD_NOT_ALLOWED).entity("Method Not Allowed")
.build();
}
}
をそして、私のjavax.ws.rs.core.Application
サブクラスにこれを追加しました:
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/v1.0")
public class JaxRsApplication extends Application {
/* Other classes and singletons redacted */
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();
/* ExceptionMappers for custom exception handling */
singletons.add(new NotAllowedMapper());
return singletons;
}
}
ただし、投稿のみをサポートしているエンドポイントにGETリクエストを発行するとき、私は私のカスタムエンティティのペイロードなしで、デフォルトの405 Responseを返します。生成された警告メッセージで
:
[WARNING] javax.ws.rs.ClientErrorException:HTTP 405メソッドは許可されていません...
私はjavax.ws.rs.ClientErrorException
がスローされていることがわかり
、 javax.ws.rs.NotAllowedException
の代わりにClientErrorException
ためExceptionMapper
実装を作成
は私が私がしたいようにカスタム応答を指定するために制御することができますが、私はむしろ、もし構造のいくつかの種類をしなければならないか、ジェネリックClientErrorException
Sを処理するために、ステータスコードに構造を切り替えないと思います正しく
NotAllowedException
の代わりにClientErrorException
がスローされている理由はありますか?または、より良いことに、NotAllowedException
を取得するために必要な設定や、より具体的な例外がスローされます(該当する場合)?
は、私はあなたのプロバイダが@Produces(MIMETYPE)注釈をミスだと思います。 – Ben
@Ben私は運がない正しいProducesアノテーションを追加しようとしました。 Producesアノテーションを使用したExceptionMapper Providerの例は見ていませんが、それは価値がありました。 – austinbruch