您好,登錄后才能下訂單哦!
實(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方法。
第一種情況
對(duì)于第1點(diǎn)來(lái)說(shuō),我們用到最多的就是entity和dto之間的轉(zhuǎn)換了,這個(gè)我們可以使用Spring的工具類(lèi)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)不能滿(mǎn)足我們的需要了。
我們可以使用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)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。