如何在spring中传递@PathVariable("timeZoneId")?

How to pass @PathVariable("timeZoneId") in spring?

我在 Spring Boot 1.5.9 中有以下 @RestController 方法:

@GetMapping(value = "/today/{timeZoneId}", produces = MediaType.APPLICATION_JSON_VALUE)
public Instant getToday(@PathVariable("timeZoneId") String timeZoneId) {
  return getNextPublishingDateTime(Instant.now(), timeZoneId);
}

当我 GET/today/Europe/Paris 时,我有一个 404 错误。

我尝试用 /today/Europe%2FParis GET,但也得到了 404

这是因为 timeZoneId.

中的斜线

如何在 Spring 中为我的 timeZoneId 使用 @PathVariable

你得到 404,因为 Spring 预计在斜杠后只有一个值(编码为 %2F 或不编码),但在你的情况下你输入了两个值:Europe 和 Paris。

一种可能的方式如下,

@GetMapping(value = "/today/{timeZoneIdPrefix}/{timeZoneIdSuffix}", produces = MediaType.APPLICATION_JSON_VALUE)
public Instant getToday(@PathVariable("timeZoneIdPrefix") String timeZoneIdPrefix,@PathVariable("timeZoneIdSuffix") String timeZoneIdSuffix) {
  String timeZoneId = timeZoneIdPrefix +"/"+ timeZoneIdSuffix;
  return getNextPublishingDateTime(Instant.now(), timeZoneId);
}

另一种方法是,不要像 Europe/Paris 那样通过欧洲-巴黎,然后将 - 替换为 /

 return getNextPublishingDateTime(Instant.now(), timeZoneId.replace("-","/"));