Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 忽略URL路径变量值内的“/”_Spring_Rest_Spring Boot - Fatal编程技术网

Spring 忽略URL路径变量值内的“/”

Spring 忽略URL路径变量值内的“/”,spring,rest,spring-boot,Spring,Rest,Spring Boot,我有一个非常奇怪的情况。我有一个API端点,它必须接受请求,列出给定端点的所有可用资源并列出特定资源。端点如下所示: /v1/patients 我可以在不传递任何路径变量的情况下调用它,它将列出所有患者记录。这里有一个特殊情况——如果我只想获取一名患者,我必须将患者编号作为路径变量传入——我的患者编号看起来像这样——2019/patientname/十月/27——这就是问题所在 当我将上面的数字作为path变量传递时,我将无法获得所需的资源,而Spring将斜杠/视为分隔符 例如: /v1/p

我有一个非常奇怪的情况。我有一个API端点,它必须接受请求,列出给定端点的所有可用资源并列出特定资源。端点如下所示:

/v1/patients
我可以在不传递任何路径变量的情况下调用它,它将列出所有患者记录。这里有一个特殊情况——如果我只想获取一名患者,我必须将患者编号作为路径变量传入——我的患者编号看起来像这样——2019/patientname/十月/27——这就是问题所在

当我将上面的数字作为path变量传递时,我将无法获得所需的资源,而Spring将斜杠/视为分隔符

例如:

/v1/patients/2019/patientname/October/27

我得到的反应就像没有找到给定的路径一样——当然没有这样的路径

是否有可能忽略这一患者编号之间的所有斜线

编辑:不可能更改患者编号,因为它是整个系统运行所基于的非常旧的遗留代码库的一部分


编辑2-在这种情况下不能使用URL编码-必须按原样传入此患者编号-这种情况非常疯狂。

您可以尝试以下方法:

@GetMapping("/v1/patients/{year}/{name}/{month}/{day}")
public ResponseEntity<Patient> getPatient(@PathVariable Integer year,
                                          @PathVariable String name,
                                          @PathVariable String month,
                                          @PathVariable Integer day) {

    String patientNumber = year + "/" + name + "/" + month + "/" + day;
    ...
}
这里有一些可能也会起作用:

@GetMapping/v1/患者/** 公共响应getPatientHttpServletRequest请求{ String patientNumner=String request.getAttributeHandlerMapping.PATH\u在\u HANDLER\u MAPPING\u属性中; ... }
抱歉,URL编码可能重复,但在这种特殊情况下对我没有帮助:谢谢!这正是我老板想要的——你至少为我节省了100天