最良の方法は、ExceptionMapper を使用することです。ExceptionMapper を実装するクラス UnmarshalExceptionMapper を作成します。これに「@Provider」で注釈を付け、Application コンストラクターで「classes.add(UnmarshalExceptionMapper.class)」または「singletons.add(new UnmarshalExceptionMapper())」を実行します。
例外マッパーは次のようになります。
@provider
public class UnmarshalExceptionMapper
implements ExceptionMapper<UnmarshalException> {
public Response toResponse(UnmarshalException exception) {
ResponseBuilder rb =
Response.status(
Response.Status.BAD_REQUEST) // Most appropriate HTTP status code
.entity(your xml goes here)
.type("application/xml");
return rb.build();
}
}
現在、例外マッパーに対してコンテンツ ネゴシエーションが行われていないため、タイプを「application/xml」に設定する必要があることに注意してください。独自のコンテンツ ネゴシエーションを行うには、リクエストから HttpHeaders を取得し、「accept」ヘッダーを見つけて、それに応じてタイプを設定します。