1.问题场景
使用restful风格的请求路径:http://127.0.0.1:8080/user/xx@qq.com,发现取得值是xx@qq
@GetMapping(value = "/user/{email}")
public String selectUserByEmail(@PathVariable(value = "email") String email) {
System.out.println(email);
}
# 结果是xx@qq,这就会导致获取的参数的值不完整
2.问题原因
我们查看源码可以知道:
原来在PathMatchConfigurer中,默认会用/users来匹配/users.*,也就是说点号后面无论是什么内容,都会被/users所取代
3.解决方法
3.1请求路径中使用正则表达式
@GetMapping(value = "/user/{email:.*}")
public String selectUserByEmail(@PathVariable(value = "email") String email) {
System.out.println(email);
}
3.2继承WebMvcConfigurationSupport类或者实现WebMvcConfigurer接口,重写configurePathMatch(PathMatchConfigurer configurer)()方法:
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
super.configurePathMatch(configurer);
}
}
到这里我们的问题就已经解决了,快去试试吧