我希望有一个ExceptionHandler来处理每个异常,同时使用ratpack实现RESTAPI。此ExceptionHandler将处理每个运行时异常并相应地发送json响应。
在ratpack中可能吗?在Spring中,我们使用@ControllerAdvice注释来实现这一点。我想使用ratpack实现类似的行为。
谢谢帮忙。
你可以绑定自己的错误处理程序,如果你使用的是spring,你可以定义一个Action类型的Bean。
嗯,最简单的方法就是定义你的实现rat pack . error . server error handler的类,在注册表中绑定到ServerErrorHandler.class。
以下是具有Guice注册表的ratpack应用程序的示例:
public class Api {
public static void main(String... args) throws Exception {
RatpackServer.start(serverSpec -> serverSpec
.serverConfig(serverConfigBuilder -> serverConfigBuilder
.env()
.build()
)
.registry(
Guice.registry(bindingsSpec -> bindingsSpec
.bind(ServerErrorHandler.class, ErrorHandler.class)
)
)
.handlers(chain -> chain
.all(ratpack.handling.RequestLogger.ncsa())
.all(Context::notFound)
)
);
}
}
和Errorhandler类似:
class ErrorHandler implements ServerErrorHandler {
@Override public void error(Context context, Throwable throwable) throws Exception {
try {
Map<String, String> errors = new HashMap<>();
errors.put("error", throwable.getClass().getCanonicalName());
errors.put("message", throwable.getMessage());
Gson gson = new GsonBuilder().serializeNulls().create();
context.getResponse().status(HttpResponseStatus.INTERNAL_SERVER_ERROR.code()).send(gson.toJson(errors));
throw throwable;
} catch (Throwable throwable1) {
throwable1.printStackTrace();
}
}
}