首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ratpack Rest API ExceptionHandler

Ratpack Rest API ExceptionHandler
EN

Stack Overflow用户
提问于 2017-02-15 15:21:09
回答 2查看 1.5K关注 0票数 3

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

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

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-05 16:11:43

最简单的方法是定义实现ratpack.error.ServerErrorHandler的类并将其绑定到注册表中的ServerErrorHandler.class

下面是具有Guice注册表的ratpack应用程序的示例:

代码语言:javascript
复制
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)
      )
    );
  }
}

错误处理程序如下:

代码语言:javascript
复制
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();
    }
  }

}
票数 5
EN

Stack Overflow用户

发布于 2018-03-22 21:28:30

您可以绑定您自己的错误处理程序,如果您正在使用spring,您可以定义一个类型为Action<BindingsSpec>,绑定您的spring应用程序main的Bean,并且只需要将您的错误处理程序声明为ratpack要到达的bean

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42253355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档