Spring 同一路由如何匹配多种请求?
比如我可以通过 post/{id} 请求文章详情页,也可以通过 post/{alias} 请求文章详情页
应该如何实现?
回答:
如果文章id为整型,那么可以使用强转来判断是否是文章id还是alias,如下
@GetMapping("post/{idOrAlias}") public R mypost(@PathVariable("idOrAlias") String idOrAlias) {
try {
Integer id = Integer.valueOf(idOrAlias);
// id的处理逻辑
} catch (NumberFormatException e) {
// alias的处理逻辑
}
return R.ok();
}
回答:
@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=>1232022-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}
回答:
post/{id}和 post/{alias} 本质上就是一个url,影响阶段只在参数绑定,你完全可以用一个参数接收,业务上自己去兼容id和alias
以上是 Spring 同一路由如何匹配多种请求? 的全部内容, 来源链接: utcz.com/p/944759.html