第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通用 ResponseTo<T> 作為 Json

通用 ResponseTo<T> 作為 Json

茅侃侃 2023-06-04 17:29:03
我正在努力反序列化JSON由通用結(jié)果結(jié)構(gòu)包裝的對象:我JSON從服務(wù)器:{  "totalsize": 5,  "data" : [             {"name":1},             {"name":2}           ]}我的Java結(jié)果對象:public class ResponseTo<T> {    public Long totalsize = null;    public final List<T> data = new ArrayList<>();}在這種情況下(可以是另一個(gè) GET 請求中的任何其他內(nèi)容)public class Item {    public int name;}在這種情況下T是一個(gè)Item.如何使用以下方法將有效負(fù)載JSON反序列化到此對象結(jié)構(gòu)中:GSON和/或com.fasterxml.jackson?我想要一個(gè)靜態(tài)方法,例如:public static <T> ResponseTo<T> stringToObject(String jsonString, Class<T> clazz ) {    final Gson gson = new Gson();    // do some typeadapter function magic    return gson.fromJson( jsonString, ResponseTo.class );}它被調(diào)用ResponseTo<Item> responseTo = stringToObject( <json-string>, Item.class );我只接收com.google.gson.internal.LinkedTreeMap數(shù)據(jù)對象。我該怎么做才能讓它發(fā)揮作用?- 我做錯(cuò)了嗎?
查看完整描述

3 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

您需要使用類型標(biāo)記來處理泛型情況,因?yàn)轭愋托畔?code>T被 Java 編譯器刪除,Gson 不知道要恢復(fù)T到什么類型。

Type typeToken = new TypeToken<ResponseTo<Item>>() { }.getType();
ResponseTo<Item> responseTo = stringToObject( <json-string>, typeToken );


查看完整回答
反對 回復(fù) 2023-06-04
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

如果您在對象中有類型鑒別器(即每個(gè)示例中具有唯一值的公共字段),那么 Jackson@JsonTypeInfo(JsonTypeInfo.As.EXISTING_PROPERTY...)將允許您定義查找位置,并且初始化可以預(yù)先注冊所有可能的類ObjectMapper.registerSubtypes(Item.class)。然后杰克遜會(huì)選擇正確的那個(gè)。

如果要實(shí)例化哪種類型的規(guī)則比“在字段 X 中查找”更復(fù)雜,那么您必須編寫自己的規(guī)則@JsonTypeResolver來實(shí)現(xiàn)所述邏輯(非平凡)。


查看完整回答
反對 回復(fù) 2023-06-04
?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

格森

您可以使用內(nèi)部com.google.gson.internal.$Gson$Types類來實(shí)現(xiàn)這一點(diǎn):


import com.google.gson.Gson;

import com.google.gson.internal.$Gson$Types;


import java.lang.reflect.ParameterizedType;

import java.util.ArrayList;

import java.util.List;


public class GsonApp {


    public static void main(String[] args) {

        String json = "{\n" +

                "  \"totalsize\": 5,\n" +

                "  \"data\": [\n" +

                "    {\n" +

                "      \"name\": 1\n" +

                "    },\n" +

                "    {\n" +

                "      \"name\": 2\n" +

                "    }\n" +

                "  ]\n" +

                "}\n";


        System.out.println(stringToObject(json, Item.class));

    }


    static <T> ResponseTo<T> stringToObject(String jsonString, Class<T> clazz) {

        final Gson gson = new Gson();

        // do some typeadapter function magic

        ParameterizedType parameterizedType = $Gson$Types.newParameterizedTypeWithOwner(ResponseTo.class, ResponseTo.class, clazz);

        return gson.fromJson(jsonString, parameterizedType);

    }

}


class ResponseTo<T> {


    public Long totalsize = null;

    public final List<T> data = new ArrayList<>();


    @Override

    public String toString() {

        return "ResponseTo{" +

                "totalsize=" + totalsize +

                ", data=" + data +

                '}';

    }

}


class Item {

    public int name;


    @Override

    public String toString() {

        return "Item{" +

                "name=" + name +

                '}';

    }

}

上面的代碼打?。?/p>


ResponseTo{totalsize=5, data=[Item{name=1}, Item{name=2}]}

杰克遜

在Jackson你可以做類似的方法:


import com.fasterxml.jackson.databind.JavaType;

import com.fasterxml.jackson.databind.ObjectMapper;


import java.io.IOException;


public class JsonApp {


    public static void main(String[] args) throws Exception {

        String json = "{\n" +

                "  \"totalsize\": 5,\n" +

                "  \"data\": [\n" +

                "    {\n" +

                "      \"name\": 1\n" +

                "    },\n" +

                "    {\n" +

                "      \"name\": 2\n" +

                "    }\n" +

                "  ]\n" +

                "}\n";


        System.out.println(stringToObject(json, Item.class));

    }


    static <T> ResponseTo<T> stringToObject(String jsonString, Class<T> clazz) throws IOException {

        ObjectMapper mapper = new ObjectMapper();

        // do some typeadapter function magic

        JavaType responseType = mapper.getTypeFactory().constructParametricType(ResponseTo.class, clazz);

        return mapper.readValue(jsonString, responseType);

    }

}


查看完整回答
反對 回復(fù) 2023-06-04
  • 3 回答
  • 0 關(guān)注
  • 209 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號