Dto类的使用以及Spring中对于前端请求处理的注意事项

目录

场景:

1.DTO类的使用案例

2.Delete请求中的细节

总结:


场景

        我根据数据库利用了MybatisPlus生成了代码模板,在完成前端发来的get请求时,发现前端想要接收的Json对象中的某些属性,实体类中没有,这时候就要额外创建DTO类,DTO也就是 Data Transfer Object,可以继承自生成的实体类,然后再DTO类中加入想添加的成员。

1.DTO类的使用案例

        前端想要的响应数据如下:

        实体类Dish中的属性如下:

        我们不难发现,前端想要的CategoryName,我们单靠这个 Dish类不足以提供,最后会导致页面数据显示不完全(因为前端没有接收到完整的数据)

        这时候我们就需要一个Dto类来做中间的传输介质 DishDto 

 并且由于我是用的是Mp(MybatisPlus)完成sql语句的增删改查,且DishDto类不在数据库表中,所以我们如果想单靠mp提供的方法,想完成DishDto的响应,就需要做一些处理,比如这里就用到了Beanutils.copyProperties()方法,实现对象的复制

        这里的场景是分页查询,也就是使用mp提供的 selectPage完成,最后将结果封装成一个Page<T>类,我们现在要做的就是将查询得到的Page<Dish>通过复制和一些处理,变为Page<DishDto>

 

 处理过程如上图所示,总的来说用了两次复制,第一复制排除了Page类中的records属性,因为通过查看Page类内部的方法我们会很容易发现records是个带有泛型的集合(见下图),这里具体就是List<Dish> records,显然不能直接复制给Page<DishDto>中的 List<DishDto>类型的 records,就算复制了也得不到CategoryName这个属性

 所以我们可以通过获取Page<Dish>的records单独拿出来处理,然后通过stream流转化为List<DishDto>类型并加上CategoryName这个属性,也就是下图所示的方法

 

2.Delete请求中的细节

        我们在写get请求的接口的时候,通常在形参部位直接写(变量类型 变量值)就行,这是因为对于get请求,SpringMVC中,Spring会自动对变量加上@RequestParam注解,对于非GET请求(如DELETE请求),Spring可能不会自动进行参数绑定,而需要显式地使用@RequestParam注解。

        对比图如下:

Delete请求:

 Get请求:

总结:

        在实际开发中,我发现了总会遇到一些出乎意料的bug或者情况,我们需要做到的就是不断解决他们,并从中吸取经验,学习并掌握之前未接触过的知识或者技术。在未来开发中,如果遇到类似的甚至其他的意外状况,都能够沉着冷静应对,从经验中找到解决方案。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值