亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-16 15:50:17 來源:腳本之家 閱讀:222 作者:張占嶺 欄目:編程語言

實體與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的自動賦值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文化| 新平| 邯郸市| 平罗县| 镇江市| 景德镇市| 天峻县| 阿拉尔市| 湟中县| 资阳市| 武鸣县| 鲁山县| 额尔古纳市| 武隆县| 彭泽县| 广宗县| 盈江县| 桐庐县| 长宁区| 洪雅县| 寿光市| 阳新县| 金昌市| 乌拉特后旗| 二手房| 廊坊市| 泗洪县| 潮州市| 探索| 东乡族自治县| 东港市| 开原市| 阿拉善左旗| 芮城县| 苏尼特左旗| 庐江县| 鹿泉市| 三亚市| 宜宾市| 托克托县| 报价|