没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
springboot~ObjectMapper~dto到到entity的自动赋值的自动赋值
主要介绍了springboot~ObjectMapper~dto到entity的自动赋值,本文分三种情况给大家介绍,需要的朋友可以参
考下
实体与实体与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的自动赋值,希望对大家有所帮助,如果大家有任何疑问
请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
资源评论
weixin_38522552
- 粉丝: 5
- 资源: 922
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功