Tomcat Jersey REST - @PathParam中的空格

时间:2016-04-18 12:11:50

标签: java tomcat jersey jersey-1.0 path-parameter

在Tomcat 2.0.27中通过Jersey 1.19创建REST服务时,@ PathParams中是否可以有空格?

每当我尝试使用文件名路径参数中的空格调用我的REST服务时,

Jersey返回400 Bad Request。它甚至没有达到我的代码。如果文件名中没有空格,则一切都按预期工作。我的REST方法的注释如下:

@GET
@Path("/trennblatt/{objId}/{filename}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getTrennblatt(
@PathParam("objId") final long objId,
@PathParam("filename") final String filename,
@Context final HttpServletResponse response)

Tomcat的访问日志,编码似乎很好:

[18/Apr/2016:11:09:17 +0200] "GET /.../trennblatt/228342/01%20Aktendecke.pdf HTTP/1.1" 400 1004
[18/Apr/2016:11:09:29 +0200] "GET /.../trennblatt/228342/inspectionsheet.html HTTP/1.1" 200 44870
[18/Apr/2016:11:13:29 +0200] "GET /.../trennblatt/228342/inspectionsheet.html/ HTTP/1.1" 200 44870
[18/Apr/2016:11:13:33 +0200] "GET /.../trennblatt/228342/01%20Aktendecke.pdf/ HTTP/1.1" 400 1004

正如访问日志所示,我甚至尝试将另一个/附加到我的URI模板,但没有成功。

@Path("/trennblatt/{objId}/{filename}/")

我也试过为filename(一切)指定字符集:

@Path("/trennblatt/{objId}/{filename:.+}")

我尝试通过添加:

来激活泽西日志
<init-param>
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
    <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
</init-param>

但无法找到任何其他输出。我甚至会为包含&#34; log&#34;的访问文件进行宣传。或&#34; out&#34;。

搜索&#34;泽西休息空间@ PathParam&#34;总是返回有趣的东西,如&#34;如何在@ PathParam&#34;中启用斜杠和点。我可以看到这将是一个问题。但我找不到关于@PathParam中的简单(和正确编码)空格是否应该有用的明确陈述。

当我使用@QueryParam时,一切都很好。

@GET
@Path("/trennblatt")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getTrennblatt(
@QueryParam("objId") final long objId,
@QueryParam("filename") final String filename,
@Context final HttpServletResponse response)

[18/Apr/2016:11:17:47 +0200] "GET /.../trennblatt?objId=228342&filename=inspectionsheet.html HTTP/1.1" 200 44870
[18/Apr/2016:11:18:04 +0200] "GET /.../trennblatt?objId=228342&filename=01%20Aktendecke.pdf HTTP/1.1" 200 45081

这是我目前的解决方法,但有一点是使用@PathParam(保持它与我们的WebDAV服务尽可能相似)。所以我真的很想得到你的意见。谢谢!

0 个答案:

没有答案