Rest 如何在URL中使用字符串?

Rest 如何在URL中使用字符串?,rest,jersey,Rest,Jersey,我正在尝试创建一个Web服务,在这里我可以使用HTTPGET方法发送stardog请求。我的问题是stardog请求使用了一些URL中不允许使用的符号,如?或并且我试图不强制用户手动将其转换为%3F或%3B 因此,我希望我的URL如下所示: localhost:8080/WebServiceTest/query?select="SELECT * WHERE {?s ?p ?o}" 我的注释如下: @GET @Path("/query") @Produces(MediaType.APPLICAT

我正在尝试创建一个Web服务,在这里我可以使用HTTPGET方法发送stardog请求。我的问题是stardog请求使用了一些URL中不允许使用的符号,如
并且我试图不强制用户手动将其转换为
%3F
%3B

因此,我希望我的URL如下所示:

localhost:8080/WebServiceTest/query?select="SELECT * WHERE {?s ?p ?o}"
我的注释如下:

@GET
@Path("/query")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
public String execQuery(@QueryParam("select") String selectQuery, @QueryParam("update") String updateQuery) {

有人知道这是否可能吗?如果是,我该怎么做呢?

如果在客户端使用Javascript/ECMAScript 5.1++,您可以将字符串转换为uri字符串格式。使用该方法

encodeURIComponent(str);
这是可以解释的

也可以更换;通过他们的代表性。(在使用cUrl的情况下)


这个JAX-RS资源的客户端是什么?网络浏览器?它应该自动对任何输入进行URL编码。Jersey将还原此编码,以便
selectQuery
将包含正确的输入。它可能是web浏览器,但也可能是cURL或用于传输数据的任何其他工具。web浏览器没有对?进行编码,我想这是因为它将它们理解为一个查询参数,而它应该是一个简单的符号。我想使用Javascript,问题是我不确定用户将如何访问此URL。如果他只是在浏览器中键入URL,我就不能使用JS。这是正确的。如果用户在“浏览器URL”字段中键入URL,而浏览器没有自动进行URL编码,则文本将通过http发送,可能会被接收者或代理误解。我不知道有什么方法可以避免这种情况。也许有人知道用浏览器拦截http发送的方法(也许是通过实现一个插件),但这对所有使用过的浏览器都是必要的。我认为这超出了范围。也许有一些插件可以自动进行URL编码。但是允许用户提供代码是一个巨大的安全风险。你知道吗?;-)谢谢你的回答。我想用户必须自己编码。是的,我明白为什么这是一件非常危险的事情,但我只是在做老板让我做的事情。我是一名开发人员,也是一家非常小的公司的首席执行官。我们的一位雇主给我指了指那个视频:。这太神奇了,就像似曾相识;-)。
(SPACE) !   "   #   $   %   &   '   (   )   *   +   ,   /   :   ; 
%20     %21 %22 %23 %24 %25 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B     

=   ?   @   [   ]
%3D %3F %40 %5B %5D