Spring NumberFormatException:无法转换类型为';java.lang.String';至所需类型';java.lang.Long

Spring NumberFormatException:无法转换类型为';java.lang.String';至所需类型';java.lang.Long,java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我不确定我是否错过了一些真正基本的东西,但这就是我想做的 我想对此地址进行rest API调用: 我的休息方法是: public void fetchlocation(@RequestParam Long lat, @RequestParam Long lng, @RequestParam int radius){ //fetches location} 我得到这个错误: “时间戳”:1442751996949,“状态”:400,“错误”:“错误请求”, “异常”:“org.springfr

我不确定我是否错过了一些真正基本的东西,但这就是我想做的

我想对此地址进行rest API调用:

我的休息方法是:

public void fetchlocation(@RequestParam Long lat, @RequestParam Long lng, @RequestParam int radius){ //fetches location}
我得到这个错误:

“时间戳”:1442751996949,“状态”:400,“错误”:“错误请求”, “异常”:“org.springframework.beans.typemischException”,
“消息”:“未能将'java.lang.String'类型的值转换为” 必需类型“java.lang.Long”;嵌套异常为 java.lang.NumberFormatException:对于输入字符串:\“-26.2041028\”,
“路径”:“/fetchlocation”

我猜这是因为RESTAPI在执行GET调用时将坐标作为字符串而不是长字符串接收。如何确保在调用时RESTAPI获得long而不是字符串值

当我改变restapi方法以字符串作为参数时,我可以很容易地使该方法工作,但是对于类型检查,我更喜欢使用long

public void fetchlocation(@RequestParam String lat, @RequestParam String lng, @RequestParam String radius){ //fetches location}

您需要确保要转换为Long的字符串只包含数字。这意味着,例如像这样的字符串,“10d”不能转换为Long,因此是例外

您试图转换为
java.lang.Long
的数字是
-26.2041028

您的号码包含一个
(十进制)。这对于
Long
s是不允许的。您需要使用
java.lang.Double

此外,对于
Long
使用
L
或对于
Double
使用
D
进行静态初始化,也可以使用
L
进行编号。尽管不是必需的,但它使代码更具可读性


例如,
-26.2041028D
对于
Double

数字不是长的,而是浮点数/Double。由于浮点数的原因,数字无法转换为长(从最初接收到的字符串),我想您可能希望对坐标值使用类似于
Double
的东西。否则,您的位置将失去很多精度。(如果你成功地将坐标四舍五入到最接近的整数,那么在每个方向上都会有大约+/-35英里的误差幅度。)谢谢-这正在起作用,真不敢相信我错过了。一旦我将其设置为double,restapi调用就工作了。谢谢哈哈,我从来没有使用过任何框架。但我有两年编写核心Java代码的经验。我想给所有框架用户一个提示,每当你遇到一个让你非常恼火的错误时,只要想想你在bigenner Java类中学到的所有基础知识就可以了。:)快乐编码!
D
不是必需的,也不是推荐的。关于
D
的注释在这里没有意义(尽管我也喜欢它)-问题代码中的任何地方都有一个静态初始化,唯一的“double”值来自查询参数。