Spring NumberFormatException:无法将类型'java.lang.String'的值转换为必需类型'java.lang.Long

时间:2015-09-20 12:32:49

标签: java spring rest spring-mvc

我不确定我是否遗漏了一些非常基本的东西,但这就是我想做的事。

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

https://localhost:8080/fetchlocation?lat=-26.2041028&lng=28.0473051&radius=500

我的休息方法是:

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

我收到此错误:

  

“timestamp”:1442751996949,“status”:400,“error”:“错误请求”,   “exception”:“org.springframework.beans.TypeMismatchException”,
  “message”:“无法将'java.lang.String'类型的值转换为   必填类型'java.lang.Long';嵌套异常是   java.lang.NumberFormatException:对于输入字符串:\“ - 26.2041028 \”“,
  “path”:“/ fetchlocation”

我想这是因为当我进行GET调用时,rest API会接收坐标作为字符串而不是Longs。在进行调用时,如何确保其余API获取Longs而不是String值?

当我更改其余的API方法以将字符串作为参数时,我可以轻松地使用该方法,但对于类型检查,我更喜欢使用Longs。

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

2 个答案:

答案 0 :(得分:3)

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

您的号码包含.(十进制)。 Long s不允许这样做。您需要使用java.lang.Double

还可以使用L的{​​{1}}或Long D来获取静态初始化。尽管不是必需的,但它使代码更具可读性。

赞,Double -26.2041028D

答案 1 :(得分:-2)

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