如何在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("-","/"));
我在 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("-","/"));