最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot~ObjectMapper~dto到entity的自動(dòng)賦值

 更新時(shí)間:2018年08月01日 14:27:22   作者:張占嶺  
這篇文章主要介紹了springboot~ObjectMapper~dto到entity的自動(dòng)賦值,本文分三種情況給大家介紹,需要的朋友可以參考下

實(shí)體與Dto自動(dòng)賦值

在開發(fā)的過程中,實(shí)體之間相互賦值是很正常的事,但是我們一般的方法都通過set和get方法來進(jìn)行的,如果要賦值的字段少那還行,但是需要賦值的字段超過10個(gè),那就是個(gè)災(zāi)難,你會(huì)看到整屏代碼中全是set和get方法。

  1. 兩個(gè)實(shí)體屬性字段幾乎完全相同
  2. 兩個(gè)字體有部分字段相同
  3. 源實(shí)體只有部分字段賦值,目標(biāo)實(shí)體有完整的值

第一種情況

對(duì)于第1點(diǎn)來說,我們用到最多的就是entity和dto之間的轉(zhuǎn)換了,這個(gè)我們可以使用Spring的工具類BeanUtils來解決,這里要注意的一點(diǎn)是,==第一個(gè)參數(shù)是源,第二個(gè)參數(shù)是目標(biāo)==。

import org.springframework.beans.BeanUtils;
BeanUtils.copyProperties(origin, target);

第二種情況

但是對(duì)于第2點(diǎn)來說,就沒有那么簡單了,再使用BeanUtils已經(jīng)不能滿足我們的需要了。
我們可以使用jackson的ObjectMapper

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.jd.fastjson.JSON;
ObjectMapper objectMapper = new ObjectMapper();
//配置該objectMapper在反序列化時(shí),忽略目標(biāo)對(duì)象沒有的屬性。凡是使用該objectMapper反序列化時(shí),都會(huì)擁有該特性。
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//讀入需要更新的目標(biāo)實(shí)體
ObjectReader objectReader = objectMapper.readerForUpdating(target);
//將源實(shí)體的值賦值到目標(biāo)實(shí)體上
objectReader.readValue(JSON.toJSONString(source));

我們總結(jié)一下objectMapper的過濾參數(shù):

 /*
 通過該方法對(duì)mapper對(duì)象進(jìn)行設(shè)置,所有序列化的對(duì)象都將按改規(guī)則進(jìn)行系列化
 Include.Include.ALWAYS 默認(rèn)
 Include.NON_DEFAULT 屬性為默認(rèn)值不序列化
 Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
 Include.NON_NULL 屬性為NULL 不序列化
 */
  objectMapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
  String outJson = objectMapper.writeValueAsString(productDetail);
//上面代碼里,outJson的值將會(huì)過濾掉只有默認(rèn)值的屬性

第三種情況

本情況主要對(duì)于從dto到entity轉(zhuǎn)換過程中出現(xiàn) ,比如一個(gè)put操作,前端可能只修改某幾個(gè)屬性,而在后端處理時(shí)也只希望處理這幾個(gè)被賦值的屬性,這時(shí)我們使用下面的方法:

 @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
 public HttpEntity update(@PathVariable int id, @RequestBody ProductDetail productDetail)
   throws IOException {
  ProductDetail existing = repository.findById(id).get();
  objectMapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
  String outJson = objectMapper.writeValueAsString(productDetail);
  ObjectReader objectReader = objectMapper.readerForUpdating(existing);
  objectReader.readValue(outJson);
  repository.save(existing);
  return new ResponseEntity<>(existing, HttpStatus.ACCEPTED);
 }

通過objectMapper的使用,確實(shí)讓我們少寫很多重復(fù)的代碼。

總結(jié)

以上所述是小編給大家介紹的springboot~ObjectMapper~dto到entity的自動(dòng)賦值,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法

    try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法

    這篇文章主要為大家介紹了try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Java中的runnable 和 callable 區(qū)別解析

    Java中的runnable 和 callable 區(qū)別解析

    Runnable接口用于定義不需要返回結(jié)果的任務(wù),而Callable接口可以返回結(jié)果并拋出異常,通常與Future結(jié)合使用,Runnable適用于簡單的后臺(tái)任務(wù)和定時(shí)任務(wù),而Callable適用于并行計(jì)算、異步操作和復(fù)雜任務(wù),選擇使用哪個(gè)接口取決于具體的應(yīng)用場景,感興趣的朋友一起看看吧
    2025-03-03
  • Java執(zhí)行JS腳本工具

    Java執(zhí)行JS腳本工具

    今天小編就為大家分享一篇關(guān)于Java執(zhí)行JS腳本工具,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 使用idea+gradle編譯spring5.x.x源碼分析

    使用idea+gradle編譯spring5.x.x源碼分析

    這篇文章主要介紹了idea?+?gradle編譯spring5.x.x源碼,在編譯spring5源碼時(shí)需要將項(xiàng)目導(dǎo)入idea中然后編譯配置,本文給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • idea編譯器工程out目錄修改方法步驟

    idea編譯器工程out目錄修改方法步驟

    多個(gè)工程在一個(gè)文件夾下,有時(shí)會(huì)變?yōu)樗械墓こ讨挥靡粋€(gè)out文件夾,這時(shí)運(yùn)行會(huì)出錯(cuò),所以本文就來介紹一下out目錄修改,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java Session驗(yàn)證碼案例代碼實(shí)例解析

    Java Session驗(yàn)證碼案例代碼實(shí)例解析

    這篇文章主要介紹了Java Session驗(yàn)證碼案例代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 解決微服務(wù)feign調(diào)用添加token的問題

    解決微服務(wù)feign調(diào)用添加token的問題

    這篇文章主要介紹了解決微服務(wù)feign調(diào)用添加token的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?boot整合ELK詳細(xì)過程

    Spring?boot整合ELK詳細(xì)過程

    ELK是由Elasticsearch、Logstash和Kibana三個(gè)開源軟件組成的技術(shù)堆棧,主要用于數(shù)據(jù)的存儲(chǔ)、處理和可視化,本文給大家介紹Spring?boot整合ELK詳細(xì)過程,感興趣的朋友一起看看吧
    2024-01-01
  • 總結(jié)Java調(diào)用Python程序方法

    總結(jié)Java調(diào)用Python程序方法

    這篇文章主要介紹了總結(jié)Java調(diào)用Python程序方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Spring Data JPA中findOne()和getOne()用法

    Spring Data JPA中findOne()和getOne()用法

    這篇文章主要介紹了Spring Data JPA中findOne()和getOne()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

商城县| 石泉县| 宁陵县| 临潭县| 瑞昌市| 弋阳县| 泸水县| 德昌县| 建瓯市| 清水县| 乐东| 民乐县| 遂溪县| 乌拉特中旗| 巴林左旗| 瑞安市| 麻栗坡县| 星子县| 阆中市| 金沙县| 贞丰县| 南溪县| 泽普县| 体育| 和顺县| 历史| 霍州市| 潍坊市| 牡丹江市| 上犹县| 昭觉县| 息烽县| 札达县| 松桃| 拉孜县| 安多县| 永平县| 天全县| 濮阳市| 闸北区| 嘉义市|