私はこれに新しいです、いくつかのドキュメントを読むことを達成しようとしていますが、それは機能しません、私と一緒に耐えてください。
次のようにUserNotFoundMapper
を使用してExceptionMappers
を作成しました。
public class UserNotFoundMapper implements ExceptionMapper<UserNotFoundException> {
@Override
public Response toResponse(UserNotFoundException ex) {
return Response.status(404).entity(ex.getMessage()).type("text/plain").build();
}
}
私のサービスでこれ:
@GET
@Path("/user")
public Response getUser(@QueryParam("id") String id) throws UserNotFoundException{
//Some user validation code with DB hit, if not found then
throw new UserNotFoundException();
}
UserNotFoundException
はUser-Defined
例外。
私はこれを試しました:
public class UserNotFoundException extends Exception {
//SOME block of code
}
しかし、サービスを呼び出すと、UserDefinedExceptionMapper
は呼び出されません。 UserDefinedException
に何かが欠けているようです。この例外をどのように定義するのですか?
UserNotFoundException
の定義方法を教えてください。
例外マッパーに @Provider
の注釈を付ける必要があります。そうしないと、JAX-RSランタイムに登録されません。
@Provider
public class UserNotFoundMapper implements
ExceptionMapper<UserNotFoundException> {
@Override
public Response toResponse(UserNotFoundException ex) {
return Response.status(404).entity(ex.getMessage()).type("text/plain")
.build();
}
}
APIを作成するときに通常行うことは、 RuntimeException から拡張される独自の例外を作成することです。したがって、必ずしも例外をキャッチする必要はありません。
以下に例を示します。
[〜#〜] note [〜#〜]:ジャージーでJAX-RSを使用しています
First:RuntimeExceptionから拡張する独自の例外を作成します。
public class ExceptionName extends RuntimeException {
private int code;
private String message;
public int getCode(){
return code;
}
public String getMessage(){
return message;
}
public ExceptionName(int code, String message) {
this.code = code;
this.message = message;
}
}
ExceptionMapper も実装します
@Provider
public class ExceptionName implements ExceptionMapper<ExceptionName>{
@Override
public Response toResponse(ExceptionName exception) {
return Response.status(exception.getCode()).entity(exception.getMessage()).build();
}
}
そして、例外をスローしたいときはいつでも、どこでもこのようにします。例外マッパーは、APIを使用しているクライアントに応答を返します。
throw new ExceptionName(500,"there was an error with something here");