java fastjson传输long数据却接收到了int的问题

目录
  • fastjson传输long数据却接收到了int
  • 使用FastJson做数据类型转换
    • 数据转化为JSON
    • 将json数据解析

fastjson传输long数据却接收到了int

最近在java开发中发现一个有趣现象,在网元A中的一个vo里有个类型为Long的taskId字段,用fastjson将其转为json字符串,用http请求传给网元B,网元B用一个map接收该实体,接收到后却发taskID其数据类型为Integer,如下图一所示。

此时如果用long taskId= (long) reqMap.get("taskId");保存字段就会报如下错误java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long如果taskId大于整型范围,那会是什么场景呢?笔者做了如下尝试,首先查询出Integer.MAX_VALUE的值为2147483647,然后将taskId的值设置为比它大的3147483647,发现网元B接受到的数据类型为Long,如图二所示。

那么后端我们怎么接受这个数据呢,笔者想到了Integer和Long的父类,查看发现她有public abstract int intValue();public abstract long longValue();,故思考可否先用父类接受再用longValue转为long类型呢?后测试可行,结果见图三。

小结一下:对于long 类型可以先用Number接收,然后再抓为long,Number b = (Number) reqMap.get("taskId"); taskId =b.longValue();

使用FastJson做数据类型转换

因为工作中会经常用到json数据和对象,集合,map,以及字符串之间的转换,因此做好一个总结

引入一个fastjosn的依赖

             <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>fastjson</artifactId>
                 <version>1.2.47</version>
             </dependency>

Java:

数据转化为JSON

Note:

由于scala的集合和Map不同于JAVA,因此此处使用java做对象转为json的案例,如有需要,可以封装对应的方法,然后使用scala调用即可

1) 将对象转化为json:

写一个user类,作为对象转化为json案例:

package entity;
public class user {

    private Integer id ;
    private String username ;
    private String password;
  public void setId(Integer id) {
        this.id = id;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getId() {
        return id;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

将对象放在Map中转化为json:

package service.impl;
import com.alibaba.fastjson.JSON;
import entity.user;
import java.util.HashMap;
import java.util.Map;
public class MapToJson {
    public static void main(String[] args) {
        user us = new user();
        us.setId(1);
        us.setUsername("lisa");
        us.setPassword("110");
        user u2 = new user();
        u2.setId(2);
        u2.setUsername("julian");
        u2.setPassword("120");

        /**
         * Map转为JSON
         */
        Map<String, user> maps = new HashMap<String, user>();
        maps.put("1", us);
        maps.put("2", u2);
        System.out.println("maps = " + JSON.toJSONString(maps));
    }
}

获得结果:

maps = {"1":{"id":1,"password":"110","username":"lisa"},"2":{"id":2,"password":"120","username":"julian"}}

2) 将字符串转化为json

将字符串转化为json,因为在数据处理中使用语言为 scala,因此使用scala作为案例:

 /**
     * 二. 将字符串转为json
     */
    case class student(
                       id:Int,
                       name:String
                      )
    var maps=Map[String,student]()
     val stu1=student(1,"lisa")
     val stu2=student(2,"july")
    maps+=("1"->stu1)
    maps+=("2"->stu2)
   val result2: String = JSON.toJSONString(maps,SerializerFeature.PrettyFormat)
println(result2)

结果:{"rule1":"kasa","rule2":"uzi"}

将json数据解析

 /**
     *   一.  将json数据解析,获得具体的值
     */
解析多层嵌套数据:
     val str = "{\"error\":200,\"msg\":null,\"tianji_api_agentn_fenqiscorev10_response\":{\"tags\":{\"150\":0,\"151\":0,\"152\":0,\"153\":0,\"154\":0,\"110\":0,\"111\":0,\"112\":1,\"113\":0,\"114\":0,\"115\":0,\"116\":0,\"117\":0,\"118\":0,\"119\":3,\"161\":3,\"162\":1,\"120\":0,\"121\":5,\"122\":0,\"123\":0,\"124\":0,\"125\":2,\"5\":\"android\",\"126\":0,\"127\":4,\"128\":0,\"129\":0,\"130\":0,\"131\":0,\"132\":0,\"133\":0,\"134\":0,\"135\":0,\"136\":0,\"137\":0,\"138\":0,\"139\":0,\"140\":3,\"141\":0,\"142\":5,\"143\":3,\"144\":0,\"101\":0,\"145\":6,\"102\":1,\"146\":0,\"103\":1,\"147\":0,\"148\":0,\"104\":0,\"149\":0,\"105\":3,\"106\":5,\"107\":0,\"108\":2,\"109\":2,\"credit_score\":457},\"biz_id\":\"2589e393-004d-4b37-b0ab-23455c4bbde2\",\"req_id\":\"15422508480665693989\"},\"request_id\":\"15422508480517778031\"}"
    //将字符串转为jsonobject
    val json: JSONObject =JSON.parseObject(str)
    //根据key获得值并获得一个jsonobject
    val tj: JSONObject =json.getJSONObject("tianji_api_agentn_fenqiscorev10_response")
    //根据上一个jsonobject获得对应key的value
    val tag=tj.getJSONObject("tags")
    //获取多级嵌套json的具体key的value
    val result=tag.getString("150")
    println(result)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 关于FastJson long 溢出问题的小结

    目录 背景 问题1. 对象转 json 字符串错误 问题2. 对象转字节数组错误 1 问题解析 2 问题处理 2.1 使用 ValueFilter 处理 2.2 替换有问题的 IntegerCodec 2.3 升级 FastJson 3 小结 背景 严选项目中早期(2015年底)接入了 FastJson(版本 1.1.48.android),随着业务发展,个别请求字段数值超出 int 范围,暴露了 FastJson 当前版本的这个溢出问题. 当做总结,希望其他团队可以趁早规避这个坑 问题1. 对

  • 关于fastjson的@JSONField注解的一些问题(详解)

    @JSONField 看源码它可以作用于字段和方法上. 引用网上说的, 一.作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称. 但是我在使用中,发现并不如上所说. 例如 @JSONField(name="project_id") private Long ProjectID 发现bean 转json的时候并是"project_id":xxx的形式,json转bean的时候也不会把"proj

  • 浅谈fastjson的常用使用方法

    如下所示: package Demo; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Vector; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; imp

  • java fastjson传输long数据却接收到了int的问题

    目录 fastjson传输long数据却接收到了int 使用FastJson做数据类型转换 数据转化为JSON 将json数据解析 fastjson传输long数据却接收到了int 最近在java开发中发现一个有趣现象,在网元A中的一个vo里有个类型为Long的taskId字段,用fastjson将其转为json字符串,用http请求传给网元B,网元B用一个map接收该实体,接收到后却发taskID其数据类型为Integer,如下图一所示. 此时如果用long taskId= (long) re

  • Java 文件传输助手的实现(单机版)

    项目介绍 用 Java 实现单机版的文件传输助手项目. 涉及技术知识: Swing 组件 I/O流 正则表达式 Java 事务处理机制 基础功能: 登录.注册 发送文字 发送图片.文件 文字.图片.文件的信息记录 历史记录的保存.回显及清空 信息发送的日期 退出 高级功能: 发送表情包 查看和查找历史记录 点击历史记录的文件图片能直接打开 拖拽输入信息.图片.文件 功能总览: 功能实现 一.登录 进入登录界面 未输入账号,登录弹出提示 输入账号,但未输入密码登录时弹出提示 账号或者密码输入错误登

  • java代码获取jenkins数据,构建历史等信息方式

    本篇文章主要介绍如何获取jenkins构建历史数据等信息,不包含java构建等操作. 1.jenkins所需jar,后续如有缺少可百度自行补齐. <!--jenkins所需jar包开始--> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</gr

  • java FastJson的简单用法

    目录 1.前言 1.1.FastJson的介绍: 1.2.FastJson的特点: 1.3.FastJson的简单说明: 2.FastJson的用法 2.1.JSON格式字符串与JSON对象之间的转换 2.2.JSON格式字符串与javaBean之间的转换 2.3.javaBean与json对象间的之间的转换 总结 参考 1.前言 1.1.FastJson的介绍: JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name"

  • Java后端之俯瞰数据接收的三种方式

    目录 一.前言 二.正文部分 第一种方法: 第二种方法: 第三种方法: 三种方法概览图: 一.前言 前面我们说了一些网页表单的功能,现在我们先来讲解数据的传输,如何进行前后端的联系 (建议先看完上篇) 二.正文部分 首先我们要先打开我们idea,如图,在jsp下的<form>也就是问卷的哪里加上action=" ", 这是在给这个弄个地址," "内容是任意的 第二步:在Demo下的Demo类下输入划线内容,只需输入@R看着选到即可回车 第三步:输入下列画

  • Spring Boot使用FastJson解析JSON数据的方法

    个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析呢? 1.引入fastjson依赖库: <!--添加fastjson解析JSON数据--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <versio

  • java读取PHP接口数据的实现方法

    和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\phpServer\Apache\logs\\error.log"; //显示的行数 const PAGES=50; public static function main(){ header("content-type:text/html;charset=utf-8"); if(!empty($_GET['action']

  • springboot实现FastJson解析json数据的方法

    最近在研究springboot实现FastJson解析json数据的方法,那么今天也算个学习笔记吧! 添加jar包: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 两种方式启动加载类: 第一种继承WebMvcConfigur

  • java向mysql插入数据乱码问题的解决方法

    遇到java向mysql插入数据乱码问题,如何解决? MySQL默认编码是latin1 mysql> show variables like 'character%'; +--------------------------+--------------------------+ | Variable_name | Value | +--------------------------+--------------------------+ | character_set_client | la

  • Java利用正则表达式提取数据的方法

    什么是正则表达式 正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. Java利用正则表达式提取数据 Java正则表达式的用途很广,之前要用到将一大 3M 的 txt 文本切分成多个小文本,用 C# 写的话很简洁,代码也就二十几行,今天用 Java 写了一下,果然,Java 很罗嗦. 切分文件的代码

随机推荐