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