当前位置: 首页 > 知识库问答 >
问题:

Ratpack Rest API ExceptionHandler

蒋哲
2023-03-14

我希望有一个ExceptionHandler来处理每个异常,同时使用ratpack实现RESTAPI。此ExceptionHandler将处理每个运行时异常并相应地发送json响应。

在ratpack中可能吗?在Spring中,我们使用@ControllerAdvice注释来实现这一点。我想使用ratpack实现类似的行为。

谢谢帮忙。

共有2个答案

封昊天
2023-03-14

你可以绑定自己的错误处理程序,如果你使用的是spring,你可以定义一个Action类型的Bean

霍弘厚
2023-03-14

嗯,最简单的方法就是定义你的实现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();
    }
  }

}
 类似资料:

相关问答

相关文章

相关阅读