始终将Request Body中的Int转换为Long

时间:2016-02-14 21:43:31

标签: java spring spring-mvc int long-integer

我用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,所以我想知道如何正确地进行转换,所以我总是很长时间。

2 个答案:

答案 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();
}