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

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

Jackson/Hibernate,meta get 方法和序列化

Jackson/Hibernate,meta get 方法和序列化

哆啦的時(shí)光機(jī) 2022-09-07 21:16:28
我們有很多具有嵌套關(guān)系的休眠實(shí)體類。我試圖找到將給定實(shí)體轉(zhuǎn)換為等效json格式的最佳方法。我知道JsonIgnore,Jackson mixins和JsonFilters,并且一直在嘗試這些。我們面臨的挑戰(zhàn)如下使用 OneToMany/JoinColumn 或類似注釋相互關(guān)聯(lián)的對(duì)象 - 創(chuàng)建無(wú)限遞歸。實(shí)用工具或元方法。杰克遜似乎在通過獲取方法而不是通過字段。某些方法是不與任何列關(guān)聯(lián)的“meta”方法。示例 getTotal 方法可以對(duì)幾個(gè)實(shí)際字段的值求和,而沒有實(shí)際的總計(jì)字段。其他情況類似,例如getIncomeAccounts,它根據(jù)某些標(biāo)準(zhǔn)過濾帳戶。我寫的 Jackson Filter 有點(diǎn)幫助 - 它根據(jù) Jackson 屬性名稱檢查類字段是否存在。它還會(huì)檢查是否存在諸如 JoinColumn 批注之類的批注,以避免在字段存在時(shí)遞歸。有沒有辦法從休眠中獲取元數(shù)據(jù)并在我的過濾器中使用它?基本上,對(duì)于給定的實(shí)體對(duì)象,我有興趣知道Jackson想要序列化的屬性是否會(huì)映射到列,并且只有在存在與其關(guān)聯(lián)的列值時(shí)才進(jìn)行序列化。Hibernate 當(dāng)然知道屬性和列映射。Mixins和jsonignore選項(xiàng)是可行的,但是我們依賴于個(gè)人開發(fā)人員記住將注釋放在適當(dāng)?shù)奈恢?。通常,?dāng)我們真的想要獲取導(dǎo)出的數(shù)據(jù)來(lái)分析一些問題并在本地創(chuàng)建測(cè)試用例時(shí),忘記的注釋被發(fā)現(xiàn)得太晚了。
查看完整描述

2 回答

?
紅顏莎娜

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

我通常做的是手動(dòng)將實(shí)體映射到DTO,或者在MapStruct等工具的幫助下。
不幸的是,這將為您提供最大的靈活性,在開始時(shí)會(huì)有一些開銷。
然而,隨著時(shí)間的推移,你會(huì)發(fā)現(xiàn)這是值得的。

Jackson、GSON 和其他序列化工具在開箱即用的功能方面顯然受到限制,而且這種自定義需要太多的工作,恕我直言,同時(shí)也難以理解和維護(hù)。

保持簡(jiǎn)單。


查看完整回答
反對(duì) 回復(fù) 2022-09-07
?
繁星點(diǎn)點(diǎn)滴滴

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

如果不想創(chuàng)建新模型以在級(jí)別上進(jìn)行表示,則需要在傳遞到層之前準(zhǔn)備模型。POJOJSONREST APIORMJackson

啟用休眠X模塊

您應(yīng)該從啟用最適合您的版本的Hibernate模塊開始。它解決了許多內(nèi)部數(shù)據(jù)類型問題。Hibernatelazy-loadings

雙向關(guān)系

閱讀有關(guān)在序列化過程中解決周期問題的選項(xiàng)。主要注釋包括:Jackson

定義適當(dāng)?shù)目梢娦?/h2>

您可以在 上定義全局可見性,如何指定 jackson 以僅使用字段 - 最好是全局的,如果需要使用 JsonAutoDetect 注釋為給定類自定義它。ObjectMapper

查看模型POJO

可能在大多數(shù)情況下,您將能夠重用為 創(chuàng)建的模型。如果使用注釋自定義輸出非常困難,您可以隨時(shí)在額外的映射/業(yè)務(wù)層中手動(dòng)創(chuàng)建自定義類并將模型映射到此類和模型。POJOORMJSONORM

自定義序列化器

如果您需要以一般方式處理某些自定義注釋或某些字段,則可以使用BeanSerializerModifierBeanPropertyWriter。它不容易實(shí)現(xiàn),但它非常強(qiáng)大。請(qǐng)參閱此處的示例用法:Jackson 自定義序列化和反序列化。

如何為雙向關(guān)系和可見性配置完成的簡(jiǎn)單示例:

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;

import com.fasterxml.jackson.annotation.ObjectIdGenerators;

import com.fasterxml.jackson.databind.ObjectMapper;


import java.io.File;

import java.util.Arrays;

import java.util.List;


public class JsonApp {


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

        File jsonFile = new File("./resource/test.json").getAbsoluteFile();


        Item item0 = new Item();

        item0.setId(1);

        item0.setItemName("Item 0");


        Item item1 = new Item();

        item1.setId(2);

        item1.setItemName("Item 1");


        List<Item> items = Arrays.asList(item0, item1);

        User user = new User();

        user.setId(123);

        user.setName("Rick");

        user.setUserItems(items);

        items.forEach(item -> item.setOwner(user));


        ObjectMapper mapper = new ObjectMapper();

        mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()

                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)

                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)

                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)

                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));


        System.out.println(mapper.writeValueAsString(user));

    }

}


@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

class User {


    private int id;

    private String name;

    private List<Item> userItems;


    // getters, setters

}


@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")

class Item {


    private int id;

    private String itemName;

    private User owner;


    // getters, setters

}

以上代碼打?。?/p>


{"id":123,"name":"Rick","userItems":[{"id":1,"itemName":"Item 0","owner":123},{"id":2,"itemName":"Item 1","owner":123}]}


查看完整回答
反對(duì) 回復(fù) 2022-09-07
  • 2 回答
  • 0 關(guān)注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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