我怎样才能接受 JSON 作为 Jersey 中的字符串

How can I accept JSON as string in Jersey

我正在尝试在我的网络应用程序中维护一些 Javascript 对象的日志。记录它们的最简单方法是将它们字符串化并将它们作为字符串放在球衣路径上。

我的记录器可以正常处理常规字符串,但在我通过一个JSON 字符串化对象。有两件事我无法解释并且我的代码出错了:

  1. 一切似乎在我的开发服务器上工作正常,但在我部署它的服务器上却没有。我在 Mac / Homebrew / Tomcat 环境中开发并部署在 CentOS 服务器上。

  2. 即使在 CentOS 服务器上,当我传递一个简单的单词字符串作为消息但传递一个 JSON 字符串时,日志记录工作正常。

我的记录器代码如下所示:

@PUT
@Path("logEvent/{fn_event}/{fn_message}")
public void logEvent(@PathParam("fn_event") String event,
        @PathParam("fn_message") String message)
        throws Exception {

        :
        :
        :

}

我已经尝试调查 catalina 日志,但它没有提供任何信息。访问日志仅提供指定 "Error 400".

的信息

如果您不对 JSON 字符串中的引号进行转义,则可能会发生这种情况。尝试用 \"

转义

Json 字符串可能有 "Spaces" 等等

因此,当您使用 space 和 & 以及许多 things/or 调用 http://yourserver/logEvent/oneword/onewordMessage it may work fine but when you call http://yourserver/logEvent/oneword 时,一条消息带有“而不是”等

那么在第二种情况下,您的路径可能编码不正确。表单编码您的 json 流,然后将其作为路径传递。

最好移动到 Post,并将流作为请求正文传递。不确定为什么您更喜欢使用 "entire" json 文件作为服务路径