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=>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解析,遇到aliasid 优先使用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

回到顶部