忽略 URL 路径变量值内的"/"



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

/v1/patients

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

当我将上面的数字作为路径变量传递时,我不会得到我想要的资源,而是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/patients/**")
public ResponseEntity<Patient> getPatient(HttpServletRequest request) {
String patientNumner = (String) 
request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
...
}

最新更新