Spring Cloud Alibaba + Grails4 学习路线二:服务调用

引入Spring cloud 和 Fegin包,注意版本和Grails版本对照

dependencyManagement {
    dependencies {
        dependency group: 'org.springframework.cloud', name: 'spring-cloud-dependencies', version: 'Greenwich.SR4', ext: 'pom'
        dependency group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-dependencies', version: '2.1.1.RELEASE', ext: 'pom'
    }
}

dependencies {
    ...
    // https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.1.5.RELEASE'

}

编写服务提供类(grails 里面常用的几个方法和请求方式(get, post, put, delete)),我们最常见的Controller

class DemoController {
	static responseFormats = ['json', 'xml']
	
    def index() {
        render 'index'
    }

    def save() {
        def record = request.JSON
        render 'save: '+ record
    }

    def update() {
        def record = request.JSON
        def _id = params.id
        render 'update id: ' + _id + ", body: " + record
    }

    def show() {
        def _id = params?.id
        render 'show: '+-_id
    }

    def delete() {
        def _id = params?.id
        render 'delete: ' + _id
    }
}

在服务消费类中,编写对应的接口信息(路径:src/main/groovy/middol/fegin/DemoFegin.groovy)

@FeignClient(name = "grails4nacos-service")
interface DemoFegin {
    @GetMapping(value = "/demo")
    String index()
    @GetMapping(value = "/demo/{id}")
    String show(@PathVariable("id") String id)
    @PostMapping(value = "/demo")
    String save(@RequestBody Map body)
    @PutMapping(value = "/demo/{id}")
    String update(@PathVariable("id") String id, @RequestBody Map body)
    @DeleteMapping(value = "/demo/{id}")
    String delete(@PathVariable("id") String id)
}

在服务消费启动类上添加Fegin注解 @EnableFeignClients(basePackages = ["middol.fegin"])

@CompileStatic
@EnableDiscoveryClient
@EnableFeignClients(basePackages = ["middol.fegin"])
class Application extends GrailsAutoConfiguration {
    static void main(String[] args) {
        GrailsApp.run(Application, args)
    }
}

编写消费类

class TestController {
	static responseFormats = ['json', 'xml']

    @Autowired
    DemoFegin demoFegin
	
    def index() {
        render demoFegin.index()
    }

    def show() {
        println params?.id
        render demoFegin.show(params?.id)
    }

    def save() {
        def _record = request.JSON
        render demoFegin.save(_record)
    }

    def update() {
        render demoFegin.update(params?.id, request.JSON)
    }

    def delete() {
        def _id = params?.id
        render demoFegin.delete(_id)
    }
}

到这里就基本上结束了,这里需要注意些,如果加了认证的,需要在服务之间传递

//控制层获取Authorization认证信息 格式:Bearer XXX-XXX-XXX-XXX
def bearerToken = request.getHeader("Authorization")?.substring("Bearer ".length())

//服务接口
String demo(@RequestHeader("Authorization") String bearerToken, @RequestParam(name = "username", required = false) String username)

系列文章链接

Spring Cloud Alibaba + Grails4 学习路线一:服务注册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值