国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

springboot~ObjectMapper~dto到entity的自動賦值

2024-07-14 08:41:53
字體:
來源:轉載
供稿:網友

實體與Dto自動賦值

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

  1. 兩個實體屬性字段幾乎完全相同
  2. 兩個字體有部分字段相同
  3. 源實體只有部分字段賦值,目標實體有完整的值

第一種情況

對于第1點來說,我們用到最多的就是entity和dto之間的轉換了,這個我們可以使用Spring的工具類BeanUtils來解決,這里要注意的一點是,==第一個參數是源,第二個參數是目標==。

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

第二種情況

但是對于第2點來說,就沒有那么簡單了,再使用BeanUtils已經不能滿足我們的需要了。
我們可以使用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在反序列化時,忽略目標對象沒有的屬性。凡是使用該objectMapper反序列化時,都會擁有該特性。objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);//讀入需要更新的目標實體ObjectReader objectReader = objectMapper.readerForUpdating(target);//將源實體的值賦值到目標實體上objectReader.readValue(JSON.toJSONString(source));

我們總結一下objectMapper的過濾參數:

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

第三種情況

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

 @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的使用,確實讓我們少寫很多重復的代碼。

總結

以上所述是小編給大家介紹的springboot~ObjectMapper~dto到entity的自動賦值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 道孚县| 稷山县| 张北县| 涪陵区| 衡东县| 天津市| 嘉义市| 邢台市| 吴旗县| 孟连| 磴口县| 祁连县| 新蔡县| 巴彦县| 溆浦县| 华亭县| 泰州市| 新宁县| 八宿县| 夏河县| 永和县| 宝鸡市| 兴化市| 荣昌县| 崇左市| 泰和县| 开封市| 嘉善县| 黄山市| 濮阳县| 富顺县| 胶南市| 通辽市| 金川县| 育儿| 新巴尔虎左旗| 奉贤区| 台东市| 启东市| 南投市| 即墨市|