欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?fastjson傳輸long數(shù)據(jù)卻接收到了int的問(wèn)題

 更新時(shí)間:2022年01月13日 17:04:18   作者:瀟瀟云起  
這篇文章主要介紹了java?fastjson傳輸long數(shù)據(jù)卻接收到了int的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

fastjson傳輸long數(shù)據(jù)卻接收到了int

最近在java開(kāi)發(fā)中發(fā)現(xiàn)一個(gè)有趣現(xiàn)象,在網(wǎng)元A中的一個(gè)vo里有個(gè)類(lèi)型為L(zhǎng)ong的taskId字段,用fastjson將其轉(zhuǎn)為json字符串,用http請(qǐng)求傳給網(wǎng)元B,網(wǎng)元B用一個(gè)map接收該實(shí)體,接收到后卻發(fā)taskID其數(shù)據(jù)類(lèi)型為Integer,如下圖一所示。

圖一

此時(shí)如果用long taskId= (long) reqMap.get("taskId");保存字段就會(huì)報(bào)如下錯(cuò)誤java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long如果taskId大于整型范圍,那會(huì)是什么場(chǎng)景呢?筆者做了如下嘗試,首先查詢(xún)出Integer.MAX_VALUE的值為2147483647,然后將taskId的值設(shè)置為比它大的3147483647,發(fā)現(xiàn)網(wǎng)元B接受到的數(shù)據(jù)類(lèi)型為L(zhǎng)ong,如圖二所示。

圖二

那么后端我們?cè)趺唇邮苓@個(gè)數(shù)據(jù)呢,筆者想到了Integer和Long的父類(lèi),查看發(fā)現(xiàn)她有public abstract int intValue();public abstract long longValue();,故思考可否先用父類(lèi)接受再用longValue轉(zhuǎn)為long類(lèi)型呢?后測(cè)試可行,結(jié)果見(jiàn)圖三。

圖三

小結(jié)一下:對(duì)于long 類(lèi)型可以先用Number接收,然后再抓為long,Number b = (Number) reqMap.get("taskId"); taskId =b.longValue();

使用FastJson做數(shù)據(jù)類(lèi)型轉(zhuǎn)換

因?yàn)楣ぷ髦袝?huì)經(jīng)常用到j(luò)son數(shù)據(jù)和對(duì)象,集合,map,以及字符串之間的轉(zhuǎn)換,因此做好一個(gè)總結(jié)

引入一個(gè)fastjosn的依賴(lài)

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

Java:

數(shù)據(jù)轉(zhuǎn)化為JSON

Note:

  由于scala的集合和Map不同于JAVA,因此此處使用java做對(duì)象轉(zhuǎn)為json的案例,如有需要,可以封裝對(duì)應(yīng)的方法,然后使用scala調(diào)用即可

1) 將對(duì)象轉(zhuǎn)化為json:

寫(xiě)一個(gè)user類(lèi),作為對(duì)象轉(zhuǎn)化為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 + '\'' +
                '}';
    }
}

將對(duì)象放在Map中轉(zhuǎn)化為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轉(zhuǎn)為JSON
         */
        Map<String, user> maps = new HashMap<String, user>();
        maps.put("1", us);
        maps.put("2", u2);
        System.out.println("maps = " + JSON.toJSONString(maps));        
    }
}

獲得結(jié)果:

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

2) 將字符串轉(zhuǎn)化為json

將字符串轉(zhuǎn)化為json,因?yàn)樵跀?shù)據(jù)處理中使用語(yǔ)言為 scala,因此使用scala作為案例:

 /**
     * 二. 將字符串轉(zhuǎn)為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)

結(jié)果:{"rule1":"kasa","rule2":"uzi"}

將json數(shù)據(jù)解析

 /**
     *   一.  將json數(shù)據(jù)解析,獲得具體的值
     */
解析多層嵌套數(shù)據(jù):
     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\"}"
    //將字符串轉(zhuǎn)為jsonobject
    val json: JSONObject =JSON.parseObject(str)
    //根據(jù)key獲得值并獲得一個(gè)jsonobject
    val tj: JSONObject =json.getJSONObject("tianji_api_agentn_fenqiscorev10_response")
    //根據(jù)上一個(gè)jsonobject獲得對(duì)應(yīng)key的value
    val tag=tj.getJSONObject("tags")
    //獲取多級(jí)嵌套json的具體key的value
    val result=tag.getString("150")
    println(result)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot logback日志框架使用過(guò)程解析

    SpringBoot logback日志框架使用過(guò)程解析

    這篇文章主要介紹了SpringBoot logback日志框架使用過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • ?java中Thread.sleep()的具體使用

    ?java中Thread.sleep()的具體使用

    本文主要介紹了?java中Thread.sleep()的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java Web 登錄頁(yè)面的實(shí)現(xiàn)代碼實(shí)例

    Java Web 登錄頁(yè)面的實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java Web 登錄頁(yè)面的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JAVA集合框架Map特性及實(shí)例解析

    JAVA集合框架Map特性及實(shí)例解析

    這篇文章主要介紹了JAVA集合框架Map特性及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 詳解Java 序列化與反序列化(Serialization)

    詳解Java 序列化與反序列化(Serialization)

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí) 吧
    2019-03-03
  • java利用Calendar類(lèi)打印日歷

    java利用Calendar類(lèi)打印日歷

    這篇文章主要為大家詳細(xì)介紹了java利用Calendar類(lèi)打印日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 淺談一下Spring中的createBean

    淺談一下Spring中的createBean

    createBean是創(chuàng)建Bean的主要方法, 該方法位于:AbstractBeanFactory的doGetBean方法中的createBean調(diào)用。本文就來(lái)淺談一下Spring中的createBean?,感興趣的可以了解一下
    2022-07-07
  • springmvc+ajax+formdata上傳圖片代碼實(shí)例

    springmvc+ajax+formdata上傳圖片代碼實(shí)例

    這篇文章主要介紹了springmvc+ajax+formdata上傳圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • logback高效狀態(tài)管理器StatusManager源碼解析

    logback高效狀態(tài)管理器StatusManager源碼解析

    這篇文章主要為大家介紹了logback高效狀態(tài)管理器StatusManager源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式

    Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式

    這篇文章主要介紹了Spring-Security對(duì)HTTP相應(yīng)頭的安全支持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論