当@PathVariable遇上中文和点

本文详细介绍了如何解决SpringMVC中处理中文路径和特殊字符时出现的问题,包括URL编码设置、文件后缀处理以及路径匹配规则的调整,确保应用能够正确解析并响应包含中文和特殊字符的请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring MVC从3.0开始支持REST,而主要就是通过@PathVariable来处理请求参数和路径的映射。
由于考虑到SEO的缘故,很多人喜欢把新闻的名称作为路径中的一部分去处理,这时候中文的名称就会遇到问题,没办法映射,这个是因为编码问题,只要到TOMCAT/conf下找到server.xml,添加URIEncoding="UTF-8"进行URL编码设置就可以解决中文问题。
另外经常遇到路径中有点".",而点是特殊字符,比如.html, .do等等,所以Spring MVC默认是把点后面的信息当作文件后缀,这时候我们就要修改这个默认值。

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors" ref="localeChangeInterceptor"/>
[color=orange]<property name="useDefaultSuffixPattern" value="false" /> [/color] </bean>

另外,这时候如果只设置这个,请求可以传递到对于的controller,但传过去的数据会有问题,只会传最后一个点前面的数据,除非你在最后加上“/”,比如/news/测试.点/ 这样就会把“测试.点”当作整体,不然只会得到“测试”。这时候我们可以这样设置[color=orange]@RequestMapping("/news/{title:.*}")[/color]这样就一切ok啦。
### @PathVariable @DeleteMapping 注解的用法及区别 #### @PathVariable 的使用方法 `@PathVariable` 是用于获取 URL 中占位符参数的一种注解。当定义 RESTful 风格接口时,通常会把一些动态数据作为路径的一部分传递给服务器端处理函数。通过 `@PathVariable` 可以方便地提取这些变量并映射到控制器的方法形参上。 ```java @GetMapping("/users/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id){ User user = userService.findById(id); if (user != null) { return new ResponseEntity<>(user, HttpStatus.OK); } return new ResponseEntity<>(HttpStatus.NOT_FOUND); } ``` 此代码片段展示了如何利用 `@PathVariable` 来接收来自客户端请求中的 ID 参数[^1]。 #### @DeleteMapping 的使用方法 而 `@DeleteMapping` 则是用来指定 HTTP DELETE 请求所对应的操作。它简化了对特定类型的HTTP 方法的支持配置过程,在编写REST API 时非常有用。可以单独使用也可以配合其他参数一起使用来更精确地匹配路由规则。 ```java @DeleteMapping("/users/{userId}") public void deleteUser(@PathVariable("userId") String userId){ userRepository.deleteById(userId); } ``` 上述例子说明了一个删除用户的API实现方式,其中包含了 `@DeleteMapping` 对应于DELETE操作以及 `@PathVariable` 获取URL里的用户ID[^2]。 #### 主要差异对比 - **功能定位不同**:`@PathVariable` 属于参数绑定层面;`@DeleteMapping` 关联着整个请求类型。 - **应用场景有别**: 使用 `@PathVariable` 处理带有可变部分(比如资源标识符)的 URI 路径;采用 `@DeleteMapping` 定义响应 delete 类型 http 请求的服务逻辑。 - **组合运用情况**: 实际开发过程中经常看到两者共同出现在同一个处理器方法签名里,分别承担各自职责——前者负责解析入参后者决定行为模式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值