前后端路径传值问题@PathVariable

本文探讨了两种常见的后台获取数据的方式:通过路径变量(@PathVariable)和查询参数。第一种方法是在URL路径中传递ID,如`@GetMapping({id}

前端路径传值问题
在这里插入图片描述

//1-后台获取数据方式
@GetMapping( "{id}")
public void get( @PathVariable  Long id){}

在这里插入图片描述

//2-后台获取数据方式
@GetMapping
public void get(  int  page, int pagesize){}
### @PathVariable 解析字符串类型路径参数错误原因 当使用 `@PathVariable` 来解析 URL 中的占位符时,如果路径中包含特殊字符或特定模式(如文件扩展名),可能会遇到解析失败的情况。具体来说,在某些情况下,Spring MVC 的默认配置会截断带有小数点或其他特殊字符后的部分[^3]。 例如,对于 `/download/file.name.pdf` 这样的路径,默认情况下 Spring 只能正确识别到 `/download/file` 部分,而 `.name.pdf` 则被忽略掉。这主要是因为 Spring 默认认为路径中的最后一个点之后的部分是一个文件扩展名并尝试将其作为视图解析器的一部分处理。 ### 解决方案 #### 方案一:修改路径结构 一种简单的办法是在设计 API 时避免让路径变量中含有容易引起歧义的内容,比如通过调整 URL 设计来绕过这个问题: ```java @RequestMapping("/files/{fileId}") public ResponseEntity<byte[]> downloadFile(@PathVariable String fileId){ // 实现逻辑... } ``` 这样可以确保不会受到文件名中可能存在的特殊字符影响。 #### 方案二:使用正则表达式匹配更复杂的路径模式 为了能够支持更加灵活多变的实际需求,可以在定义控制器方法的时候利用 SpEL (Spring Expression Language) 和正则表达式的组合来进行精确控制: ```java // 支持任意长度和类型的版本号 @RequestMapping(value = "/module/download/apk/{version:.+}", method = RequestMethod.GET) public void handleApkDownload( HttpServletRequest request, HttpServletResponse response, @PathVariable("version") String version) { // 处理下载业务... } // 对于其他类型的资源也可以采用类似的策略 @RequestMapping(value = "viewFile/{module}/{filename:.+}", method = RequestMethod.GET) public ModelAndView viewFile( @PathVariable("module") String module, @PathVariable("filename") String filename) { // 返回相应的视图模型... } ``` 上述代码片段展示了如何通过设置 `{variableName:regex}` 形式的占位符来允许任何非白字符组成的路径段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值