up:: SpringBoot电商项目订单模块前台创建订单接口
说明:
(1) 本篇博客的内容:开发【前台:订单详情】接口;
(2) 本篇博客的整体逻辑比较简单;需要注意的地方有两点:
● 要做好权限校验;
● 需要根据接口对返回数据的格式要求,去组织数据;
一:【前台:订单详情】接口介绍;
1.【前台:订单详情】接口,接口文档;
可以看到,接口要求的返回数据的格式,使用以前创建的Order和OrderItem去包装数据,都不能满足要求;
所以,为了能够更好的组织数据,以满足接口对返回数据格式的要求,我们创建了OrderVO实体类和OrderItemVO实体类:
OrderItemVO:
OrderVO:
2.【前台:订单详情】接口,在界面上的表现;
我们可以点击某个订单,去查看订单详情;
二:正式开发;
1.在OrderController中,创建处理【前台:订单详情】接口请求的方法:detail()方法;
说明:
(1) 请求方式、url,参数,要符合接口要求;
(2) 我们在Service层,编写了一个获取订单详情的逻辑方法:detail()方法;这在下一部分介绍;
2.在OrderServiceImpl中,编写获取订单详情的逻辑方法:detail()方法;
说明:
(1) 根据【接口要求的返回数据格式,我们创建了OrderVO这个实体类】;所以,我们detail()方法的返回值类型需要是OrderVO类型的;;也就是说,我们service层的方法,在获取到订单详情数据后,需要包装成OrderVO格式;
(2) 首先,我们要根据接口传过来的订单号,去order订单表中,去查;
● 这儿,我们在OrderMapper中,编写了一个根据订单号查询订单的方法:
(3) 如果,根据接口传的订单号,没有查到订单,我们就抛出“订单不存在”异常;
(4) 就算根据订单号查到了订单;但,发现查到的订单的所属用户和当前登录用户不一样;就抛出“这个订单不属于你”的异常;(否则就会产生横向越权)
(5) 然后,一切检查OK后,我们需要做的就是,组装符合接口要求格式的返回数据了;我们编写了getOrderVO()这个工具方法,用来拼装订单详情数据;
(6.1) 首先,我们需要把Order中,与OrderVO重复的属性,赋值给OrderVO对象;
(6.2) 然后,去查询该订单中的,每种商品的信息;也就是查询order_item表,得到OrderItem格式的数据;为此,我们在OrderItemMapper中,编写了一个根据订单号,查询该订单中是所有商品的方法;
(6.3) 然后,把查到的所有OrderItem格式的数据,转化为OrderItemVO格式的数据;
(6.4) 然后,把得到的List<OrderItemVO>赋值给OrderVO;
(6.5) 然后,就是根据订单状态码,获取订单状态信息,然后赋值给OrderVO了;
● 可以看到,这儿我们就用到了我们在【附加枚举类本篇博客没什么新的内容只是这儿用到了遍历枚举中枚举项的方法】中介绍的,使用到了遍历枚举的枚举项技术的codeOf()方法;
(7) 至此,OrderVO我们就组装好了;
(8) Service层,把这个组装好的OrderVO返回给Controller层;
3.在OrderService中,方向生成方法的定义;
三:测试;