使用jersey-container-grizzly2-http
Maven依赖版本2.13启动Eclipse的简单REST接口时,我在浏览器中触发错误后不会显示任何异常。其他日志输出在控制台中显示得很好,但异常只是被吞下。
我创建了一个既未实例化也未调用的异常处理程序:
package mypackage.rest;
@Provider
class ExceptionHandler implements ExceptionMapper<Throwable>
{
@Override public Response toResponse(Throwable t)
{
System.out.println("toResponse called");
t.printStackTrace();
return Response.status(Status.BAD_REQUEST).entity(t.getMessage()).build();
}
}
Grizzly Server构造:
package mypackage.rest;
public class GrizzlyHttpUtil
{
public static final URI baseURI = UriBuilder.fromUri("http://localhost/").port(10010).build();
public static HttpServer startThisServer()
{
ResourceConfig resCon = new ResourceConfig().packages("mypackage.rest");
return server = GrizzlyHttpServerFactory.createHttpServer(baseURI, resCon);
}
}
REST API类
package mypackage.rest;
@Path("")
public class Rest
{
@GET @Path("datasets") @Produces(MediaType.TEXT_HTML)
public static String datasets()
{
throw new RuntimeException();
}
}
更新
我让它与resCon.register(ExceptionHandler.class);
一起工作。为什么这有必要?为什么ResourceConfig()。packages(...)不能单独处理它?</ p>
答案 0 :(得分:1)
我只需要解决同样的问题。这是我的初始化代码,它说服Grizzly HTTP服务器显示错误:http://source.apidesign.org/hg/bck2brwsr/rev/18ae4fbcfb87
Logger l = Logger.getLogger("org.glassfish.grizzly.http.server.HttpHandler");
l.setLevel(Level.FINE);
l.setUseParentHandlers(false);
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.ALL);
l.addHandler(ch);
我正在使用Grizzly 2.3.3