当前位置: 首页 > 面试题库 >

如何传递包含斜线字符的字符串路径参数?

公羊浩阔
2023-03-14
问题内容

我有这个REST资源:

@GET
@Path("{business},{year},{sample}")
@Produces(MediaType.APPLICATION_JSON)
public Response getSample(
        @PathParam("business") String business,
        @PathParam("year") String year,
        @PathParam("sample") String sampleId {
    Sample sample = dao.findSample(business, year, sampleId);
    return Response.ok(sample).build();
}

sample例如,param可以包含斜杠字符:6576/M982

http://ip:port/samples/2000,2006,6576/M982明显,我在用它来调用它,但是不起作用。

我也尝试过使用http://ip:port/samples/2000,2006,6576%2FM982,将斜杠编码为%2F,但也不起作用,它也不会到达端点。

编辑

我正在使用Retrofit来调用端点,并且这样做:

@GET("/samples/{business},{year},{sampleId}")
Observable<Sample> getSampleById(
        @Path("business") String business,
        @Path("year") String year,
        @Path(value = "sampleId", encoded = true) String sampleId);

使用encoded = true,但仍然无法正常工作。


问题答案:

保留字符(例如,和)/必须经过URL编码。

  • , 编码为 %2C
  • / 编码为 %2F

尝试http://ip:port/samples/2000%2C2006%2C6576%2FM982

在RFC
3986个
定义了以下一组保留的字符可被用作分隔符。因此,它们需要URL编码:

: / ? # / [ ] / @ ! $ & ' ( ) * + , ; =

未保留的字符不需要URL编码:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

如果URL编码,不是您的理想选择,则可以考虑使用查询参数。您的代码将类似于:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getSample(@QueryParam("business") String business, 
                          @QueryParam("year") String year,
                          @QueryParam("sample") String sampleId {
    ...
}

您的网址将是http://ip:port/samples?business=2000&year=2006&sample=6576%2FM982

请注意,/仍然需要对URL进行编码。



 类似资料:
  • 问题内容: 我想定义一个带有参数的路由,该参数将包含一个斜线字符,例如参数在哪里。 如何防止Laravel读取斜线作为下一个route参数的分隔符?因此,我现在有了。 问题答案: 将下面的全部路线添加到您的底部,并记住之后再运行。注意,使用“-> where”来指定参数的可能内容,从而使您能够使用包含斜杠的参数。 而且比起在控制器中,您只需像平常一样处理数据(就像它不包含斜杠一样)。 这应该为您工

  • 问题内容: 我有一个字符串存储为: 有没有办法我可以转换成? 问题答案: 您可以为此使用: 输出:

  • 我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?

  • 首先,在测试用户何时登录或完全注册时,没有异常或错误,但当用户注销并重新打开应用程序时,应用程序崩溃。logcat基本上指出了这个错误: 但是如果我把currentUserID改为Users。。应用程序停止崩溃,运行平稳,但不会加载导航抽屉中的用户名和个人资料图像。 主要活动。JAVA

  • 问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出:

  • 问题内容: 我的应用程序中有一个奇怪的异常,我想记录它发生的时间,并包括完整的请求字符串(包括参数)。 当我尝试 我得到了请求字符串,但没有得到包含的参数?和&。 例: 我只看到 我可以把整个字符串放在某个地方吗? 问题答案: 参见HttpServletRequest#getQueryString() 如果需要整个字符串,则必须将请求url和查询字符串附加在一起,因为没有方法可以获取整个字符串。