比如我可以通过 post/{id} 请求文章详情页,也可以通过 post/{alias} 请求文章详情页
应该如何实现?
@Slf4j
@RestController
@RequestMapping
public class IndexController {
@GetMapping({"post/{id}", "post/{alias}"})
public String index(@PathVariable(value = "id", required = false) Integer id,
@PathVariable(value = "alias", required = false) String alias) {
log.info("postId=>{}, postAlias=>{}", id, alias);
return "index";
}
}
2022-10-09 11:40:54.465 INFO 22878 --- [io-19999-exec-1] com.example.nadp01.IndexController : postId=>null, postAlias=>123
2022-10-09 11:41:06.235 INFO 22878 --- [io-19999-exec-3] com.example.nadp01.IndexController : postId=>null, postAlias=>hello world
这样即可
这玩意确实有问题,(。・_・。)ノI’m sorry~
PathVariableMethodArgumentResolver
解析,遇到alias
和id
优先使用alias
(字典序)解析,正好是String类型,便直接由alias
接收。
只能这样做了,或者自己实现一个ArgumentResolver
,不过没太大必要
@GetMapping({"post/{alias}"})
public String index(@PathVariable String alias) {
if (StringUtils.isNumeric(alias)) {
log.info("id=>{}", alias);
} else {
log.info("alias=>{}", alias);
}
return alias;
}
可以通过 post/{id} 请求文章详情页,也可以通过 post/{alias} 请求文章详情页
你这两个都是用来访问详情页的,而且还要拼在uri中,没有办法区分呀,你可以使用post/{postId}查数据库的时候可以用id=#{postId} or alias=#{postId}
3 回答2.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
如果文章id为整型,那么可以使用强转来判断是否是文章id还是alias,如下