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

时间:2019-10-04 13:13:15

标签: spring rest spring-boot

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

/v1/patients

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

当我将上述数字作为路径变量传递时,我将无法获得所需的资源,相反, Spring将斜杠“ /”视为分隔符

示例:

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

我得到的响应就像找不到给定的路径-当然没有这样的路径。

是否可以忽略此患者编号之间的所有斜线?

编辑:无法更改患者编号,因为它是一个非常老旧的代码库的一部分,整个系统都在该代码库上运行。

编辑2 -在这种情况下无法使用URL编码-必须直接输入此患者编号-情况非常疯狂。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

@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);
    ...
}