Java Jersey/Grizzly POST因大URI而失败

Java Jersey/Grizzly POST因大URI而失败,java,rest,http-headers,jersey,grizzly,Java,Rest,Http Headers,Jersey,Grizzly,相关:以及 我正在开发一个PostWebService(jersey/grizzly,仅用于研究目的),它应该能够处理大型URI。但如果URI超过8000个字符,我会得到一个400个错误请求异常,没有进一步的解释。我调试/跟踪到grizzly maxHttpHeaderSize属性。我试图设置此属性,但失败。以下是我如何启动服务器和请求: GrizzlyServerFactory.createHttpServer(BASE_URI, new PackagesResourceConfig("org

相关:以及

我正在开发一个PostWebService(jersey/grizzly,仅用于研究目的),它应该能够处理大型URI。但如果URI超过8000个字符,我会得到一个400个错误请求异常,没有进一步的解释。我调试/跟踪到grizzly maxHttpHeaderSize属性。我试图设置此属性,但失败。以下是我如何启动服务器和请求:

GrizzlyServerFactory.createHttpServer(BASE_URI, new PackagesResourceConfig("org.test"));

JSONObject s = new JSONObject(webResource.queryParams(queryParams).post(String.class));
谢谢你的帮助! 干杯
Daniel

您尝试过使用较短的URI吗?可能您的服务器无法处理这么长的URI

您可以在此处阅读更多信息:


为什么不将URL中的请求数据放到请求正文中?

问题是GrizzlyServerFactory返回已经启动的HttpServer,这就是为什么不能动态重新配置它。 这里[1]我创建了GrizzlyServerFactory的一个副本,它不启动HttpServer,因此代码如下:

    HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
    httpServer.getListener("grizzly").setMaxHttpHeaderSize(Integer.MAX_VALUE);

    // don't forget to start the server explicitly
    httpServer.start();
希望这会有所帮助


[1]

您无需立即启动即可创建grizzly http服务器

public static HttpServer createHttpServer(
     final URI uri, 
     final ResourceConfig configuration, 
     final boolean start)
所以基本上你创建它,通常把false作为第三个参数

返回HttpServer对象后,可以
HttpServer.getListener(“grizzly”).setMaxHttpHeaderSize(Integer.MAX_值)

如前所述,不要忘记手动启动服务器。

很抱歉,这没有帮助。我没有使用浏览器。我只能像jersey want's me那样调用Web服务,但很可能您的服务器无法处理这么长的URI。请尝试使用较短的URI并给我们反馈。在我提供的链接中还有关于服务器(和最大URI大小)的指导。太棒了!谢谢你,阿列克西!但是现在有没有办法不用创建自己的类就可以做到这一点呢?(因为这不是更新证明:()嗨,丹尼尔,我理解你的担忧,但不幸的是,我现在没有其他办法。你可以提交Jersey问题,并要求Jersey人员扩展标准GrizzlyServerFactory功能。