實體與Dto自動賦值
成都創(chuàng)新互聯(lián)服務項目包括廬江網(wǎng)站建設(shè)、廬江網(wǎng)站制作、廬江網(wǎng)頁制作以及廬江網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,廬江網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到廬江省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
在開發(fā)的過程中,實體之間相互賦值是很正常的事,但是我們一般的方法都通過set和get方法來進行的,如果要賦值的字段少那還行,但是需要賦值的字段超過10個,那就是個災難,你會看到整屏代碼中全是set和get方法。
第一種情況
對于第1點來說,我們用到最多的就是entity和dto之間的轉(zhuǎn)換了,這個我們可以使用Spring的工具類BeanUtils來解決,這里要注意的一點是,==第一個參數(shù)是源,第二個參數(shù)是目標==。
import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(origin, target);
第二種情況
但是對于第2點來說,就沒有那么簡單了,再使用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在反序列化時,忽略目標對象沒有的屬性。凡是使用該objectMapper反序列化時,都會擁有該特性。 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //讀入需要更新的目標實體 ObjectReader objectReader = objectMapper.readerForUpdating(target); //將源實體的值賦值到目標實體上 objectReader.readValue(JSON.toJSONString(source));
我們總結(jié)一下objectMapper的過濾參數(shù):
/* 通過該方法對mapper對象進行設(shè)置,所有序列化的對象都將按改規(guī)則進行系列化 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轉(zhuǎn)換過程中出現(xiàn) ,比如一個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的使用,確實讓我們少寫很多重復的代碼。
總結(jié)
以上所述是小編給大家介紹的springboot~ObjectMapper~dto到entity的自動賦值,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!