亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

第一種情況

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

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

第二種情況

但是對(duì)于第2點(diǎn)來(lái)說(shuō),就沒(méi)有那么簡(jiǎ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ì)象沒(méi)有的屬性。凡是使用該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的過(guò)濾參數(shù):

 /*
 通過(guò)該方法對(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ì)過(guò)濾掉只有默認(rèn)值的屬性

第三種情況

本情況主要對(duì)于從dto到entity轉(zhuǎn)換過(guò)程中出現(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);
 }

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

總結(jié)

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

相關(guān)文章

  • mybatis中批量插入的兩種方式(高效插入)

    mybatis中批量插入的兩種方式(高效插入)

    MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了mybatis中批量插入的兩種方式(高效插入)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-09-09
  • Springboot新建項(xiàng)目Spring Initializr Error問(wèn)題及解決

    Springboot新建項(xiàng)目Spring Initializr Error問(wèn)題及解決

    這篇文章主要介紹了Springboot新建項(xiàng)目Spring Initializr Error問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java實(shí)現(xiàn)替換集合中的元素的方法詳解

    Java實(shí)現(xiàn)替換集合中的元素的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)替換集合中的元素的常見(jiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • springboot集成mqtt的實(shí)踐開(kāi)發(fā)

    springboot集成mqtt的實(shí)踐開(kāi)發(fā)

    本篇文章主要介紹了springboot集成mqtt的實(shí)踐開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • springboot整合log4j的踩坑實(shí)戰(zhàn)記錄

    springboot整合log4j的踩坑實(shí)戰(zhàn)記錄

    log日志的重要性不言而喻,所以我們需要在系統(tǒng)內(nèi)根據(jù)實(shí)際的業(yè)務(wù)進(jìn)行日志的整合,下面這篇文章主要給大家介紹了關(guān)于springboot整合log4j的踩坑實(shí)戰(zhàn)記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • springboot 緩存@EnableCaching實(shí)例

    springboot 緩存@EnableCaching實(shí)例

    這篇文章主要介紹了springboot 緩存@EnableCaching實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 使用SSM+Layui+Bootstrap實(shí)現(xiàn)汽車維保系統(tǒng)的示例代碼

    使用SSM+Layui+Bootstrap實(shí)現(xiàn)汽車維保系統(tǒng)的示例代碼

    本文主要實(shí)現(xiàn)對(duì)汽車維修廠的信息化管理功能,。實(shí)現(xiàn)的主要功能包含用戶管理、配置管理、汽車管理、故障管理、供應(yīng)商管理、配件管理、維修訂單管理、統(tǒng)計(jì)信息、公告管理、個(gè)人信息管理,感興趣的可以了解一下
    2021-12-12
  • 這么優(yōu)雅的Java ORM沒(méi)見(jiàn)過(guò)吧!

    這么優(yōu)雅的Java ORM沒(méi)見(jiàn)過(guò)吧!

    這篇文章主要介紹了Java ORM的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Security框架:如何使用CorsFilter解決前端跨域請(qǐng)求問(wèn)題

    Security框架:如何使用CorsFilter解決前端跨域請(qǐng)求問(wèn)題

    這篇文章主要介紹了Security框架:如何使用CorsFilter解決前端跨域請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    新版IDEA使用Spring Initializr創(chuàng)建工程的兩種方法

    這篇文章主要介紹了新版IDEA使用Spring Initializr創(chuàng)建工程(兩種方法,官方工具和IDEA),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-10-10

最新評(píng)論