我用Java编写了我的后端,端点被请求体点击中。端点有一个看起来像这样的JSON主体
{"id": 1234, "data": {...}}
现在,我正在获取请求数据,并通过id存储它。我希望将id保存为long,但是,值可以是从int-valid到long-valid的任何位置。
我正在使用Spring框架来保存它。该函数看起来像这样
public String getData (@RequestBody JSONObject jsonRequest) {
Long id_long = (Long) jsonRequest.get("id");
但是,我收到此错误
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
这就是我被困住的地方。有时,id值会像1234L一样有效,或者是一个非常长的远程数字。但是,有时它是int范围。我没有那么多地使用Java,所以我想知道如何正确地进行转换,所以我总是很长时间。
答案 0 :(得分:1)
简单的答案是使用 java.lang.Number 对象,该对象是 Long 和 Integer 类的超类。它有一个 longValue()方法,每次都能获得一个长的值。
public String getData (@RequestBody User user) {
Long id_long = ((Number) jsonRequest.get("id")).longValue();
更长的答案是不使用像JSONObject这样的泛型类。定义自己的类,并使用spring绑定它...
public class User {
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
public String getData (@RequestBody User user) {
Long id_long = user.getId();
答案 1 :(得分:0)
Integer
有一个longValue方法,可以将值作为long
(基元)返回。您可以将其分配到id_long
并让autoboxing将其包装为Long
。
public String getData (@RequestBody JSONObject jsonRequest) {
Long id_long = jsonRequest.get("id").longValue();
}