当前位置:   article > 正文

初学SpringCloud,我的controller层对service层的调用_springboot controller调用service过程

springboot controller调用service过程

我的上一篇文章:

初学SpringCloud,service对dao层的调用,简单讲一下我service层的代码

1、本篇博客的简介

          我的这篇文章所在的专栏记录的是我的一个简单的项目过程,像连续剧一样。

2、简单阐述开发的简单的层次规范

         在目前公认的项目规范中,controller层(具体类)调用service层(接口和实现类),service层调用dao层(接口),dao层(接口)配合实体类,mapper.xml,application.yml跟数据库交换数据。

3、简单看一下我的controller层的结构

我的controller层次目前还比较简单,只有一个类,在逻辑上是   支付类

4、解释一下我的PaymentController类中的代码

代码如下:

  1. package com.springcloud.controller;
  2. import com.springcloud.entities.CommonResult;
  3. import com.springcloud.entities.Payment;
  4. import com.springcloud.service.PaymentService;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.cloud.client.ServiceInstance;
  8. import org.springframework.cloud.client.discovery.DiscoveryClient;
  9. import org.springframework.web.bind.annotation.*;
  10. import javax.annotation.Resource;
  11. import java.util.List;
  12. @RestController
  13. //下面这个注解的作用我还不是很清楚
  14. @Slf4j
  15. public class PaymentController {
  16. @Resource
  17. private PaymentService paymentService;
  18. @Value("${server.port}")
  19. private String serverPort;
  20. //对于注册进eureka里面的服务,我们有一个需求,这个需求就是:
  21. //我们要通过注册中心,来看到这个服务的信息,比如地址啦什么的
  22. //下面的这个注入的对象就是这个作用
  23. //我们可以通过服务发现来获取该服务的信息
  24. @Resource
  25. private DiscoveryClient discoveryClient;
  26. //上面的这个包很容易引错,一定要是上面的才行
  27. @GetMapping("/payment/get/{id}")
  28. @ResponseBody
  29. public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
  30. Payment payment = paymentService.getPaymentById(id);
  31. System.out.println(payment);
  32. if (payment!=null){
  33. System.out.println(payment);
  34. return new CommonResult(200,"查询数据成功,server.port:"+serverPort,payment);
  35. }else{
  36. return new CommonResult(500,"查询数据是空",null);
  37. }
  38. }
  39. @PostMapping("/payment/create")
  40. public CommonResult create(@RequestBody Payment payment){
  41. int result = paymentService.create(payment);
  42. //log.info("插入成功"+result);
  43. if (result>0){
  44. return new CommonResult(200,"插入数据成功,server.port:"+serverPort,result);
  45. }else{
  46. return new CommonResult(500,"插入数据失败",null);
  47. }
  48. }
  49. // @GetMapping(value = "/payment/discovery")
  50. // public Object discovery(){
  51. // //得到我们的服务清单列表,盘点一下家底,这个还是需要我认真的理解一下的
  52. // List<String> services = discoveryClient.getServices();
  53. // for (String service:services) {
  54. // //log.info("*******service"+service);
  55. // }
  56. // List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
  57. // for (ServiceInstance instance : instances) {
  58. // //log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
  59. // }
  60. //
  61. // return this.discoveryClient;
  62. // }
  63. }

 上面的是我的代码,其中有一个被注释掉的方法,这个是后期增加功能的时候,会加上去的方法,目前的话还不涉及。

在这里我有一个问题:我在方法内使用log日志的时候,IDEA工具会给我提醒,info()方法也会给我提醒,但就是当启动这一个微服务的时候,控制台会报错。我查找了一些博客,但是目前还没有解决,我感觉是版本的问题(插件版本,JDK版本,Maven版本,IDEA版本)。这个我后期会再查一下,等解决了,再发博客。也欢迎能解决这个问题的小伙伴给我留言。问题截图如下:

@RestController=@Controller+@ResponseBody

controller层肯定都需要@Controller注解

因为dao层次需要调用service层次,所以我就注入了service层的接口

(在这里有个需要注意的,我在这里注入的是接口,可以正常运行。但是我跟我的小伙伴交流的时候,他一直注入的都是那个实现类,也可以正常运行。原先在学校学习的时候,我们使用的是@Autowired注解,老师注入的是接口还是类,我也记不清楚了,哈哈哈哈哈,我不是好学生)

然后就是一个查询的方法,因为是查询,所以使用@GetMapping注解。使用@ResponseBody注解将返回的对象JSON序列化。

然后就调用注入进来的service接口的对象的方法,查询得到一个payment(实体类)

注意:后面的System.out.println()方法,将这个对象输出,输出的是这个对象的地址。

再往下,就进入到一个判断,返回一个CommonResult对象(这也是一个实体类,后面我会记录到的)

5、我的下一篇博客的链接

初学SpringCloud:使用Eureka作为服务注册中心,写服务注册中心的微服务模块

6、补充一下,我的博客中的问题,找到了解决办法,在下面这篇博客中

Lombok插件版本问题,和某一个事物的版本冲突

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/224751
推荐阅读
相关标签
  

闽ICP备14008679号