如何在浏览器URL的PathParam中传递BigDecimal值?REST接口报错排查
解决@PathParam传递BigDecimal时的参数提取错误
哦,这个坑我之前踩过!你现在的问题根源完全出在路径参数的传递格式不对——@PathParam是从URL的路径分段里提取纯值的,根本不认识你塞进去的JSON格式字符串,所以容器才会报“无法从HTTP请求中提取参数”的错误。
为什么你的请求会失败?
你写的URL里把{"par1" : 1.2}这种JSON结构直接丢进了路径分段,但@PathParam("par1")期望拿到的是一个可以直接转换成BigDecimal的纯数值字符串(比如1.2),容器没法把JSON解析成BigDecimal类型,自然就报错了。
正确的传递方式
直接在路径分段里放纯数值就好,不需要任何JSON格式的包装:
http://xxlocalhostaddressxx/rest/app/helloxyz/1.2/1.2/
这样容器会自动把路径里的1.2字符串转换成BigDecimal对象,完美匹配你方法里的参数定义。
额外注意事项
- 不管是整数、带小数的数值,甚至负数都可以直接传递,比如
/helloxyz/10/-2.5/也能被正确解析。 - 如果数值里包含需要URL编码的特殊字符(比如百分号
%),记得先做URL编码再传递,比如0.5%要转成0.5%25,避免解析出错。 - 别搞混参数注解:如果确实想用JSON格式传参,那应该用
@RequestBody接收整个JSON请求体,而不是把JSON塞到路径里——@PathParam就是用来处理路径分段里的纯值的。
内容的提问来源于stack exchange,提问作者yeppe
相关产品推荐
相关产品推荐

