springCloud(10):使用Feign实现声明式REST调用-构造多参数请求

请求多参数的URL

假设请求的URL包含多个参数,如:http://localhost:8086/user1?id=1&username=nihao

1.1、Feign接口

@FeignClient(name = "spring-ribbon-eureka-client2")
public interface UserFeignClient {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User findById(@PathVariable("id") Long id) throws Exception;

    /**get方式,多参数请求方式一*/
    @RequestMapping(value = "/find", method = RequestMethod.GET)
    public User find1(@RequestParam("id") Long id, @RequestParam("username") String username) throws Exception;

    /**get方式,多参数请求方式二*/
    @RequestMapping(value = "/find", method = RequestMethod.GET)
    public User find2(@RequestParam Map<String, Object> map) throws Exception;

    /**post方式,多参数请求*/
    @RequestMapping(value = "/find", method = RequestMethod.POST)
    public User find3(@RequestBody User user) throws Exception;
}

1.2、使用

package com.example.demo.controller;

import com.example.demo.feign.UserFeignClient;
import com.example.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户controller
 *
 * @Author: 我爱大金子
 * @Description: 用户controller
 * @Date: Create in 11:07 2017/7/10
 */
@RestController
public class UserController {
    @Autowired
    private UserFeignClient userFeignClient;

    @GetMapping("/user/{id}")
    public User findById(@PathVariable Long id) throws Exception {
        if (null == id) {
            return null;
        }
        return  this.userFeignClient.findById(id);
    }

    @GetMapping("/user1")
    public User find1(User user) throws Exception {
        System.out.println("get方式,多参数请求方式一 : " + user);
        if (null == user || null == user.getId()) {
            return null;
        }
        return  this.userFeignClient.find1(user.getId(), user.getUsername());
    }

    @GetMapping("/user2")
    public User find2(User user) throws Exception {
        System.out.println("get方式,多参数请求方式二 : " + user);
        if (null == user || null == user.getId()) {
            return null;
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", user.getId());
        return  this.userFeignClient.find2(map);
    }

    @PostMapping("/user3")
    public User find3(User user) throws Exception {
        System.out.println("POST方式,多参数请求方式 : " + user);
        if (null == user || null == user.getId()) {
            return null;
        }
        return  this.userFeignClient.find3(user);
    }
}
时间: 2024-11-11 14:29:15

springCloud(10):使用Feign实现声明式REST调用-构造多参数请求的相关文章

springCloud(9):使用Feign实现声明式REST调用

一.简介 前面我们是使用RestTemplate实现rest api调用的,代码如下: @GetMapping("/user/{id}") public User findById(@PathVariable Long id) throws Exception {     return  this.restTemplate.getForObject("http://spring-ribbon-eureka-client2/" + id, User.class); }

SpringCloud系列十:使用Feign实现声明式REST调用

1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class); } 由代码克制,我们是使用拼接字符串的方

springcloud之Feign实现声明式REST调用

Feign是Netflix开发的声明式.模板化的HTTP客户端,可帮助我们更加便捷.优雅的调用HTTP api.spring cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便:只需要创建一个接口,并在接口上添加一些注解,代码就完成了,Feign支持多种注解,子嗲的或者JAX-RS注解等. 添加maven依赖: <dependency> <groupId>org.springframewo

Feign:声明式REST调用

一. 简介 1. 声明式,模板化的HTTP客户端,可以帮助我们更加便捷,优雅的调用HTTP API: 2. 为服务消费者整合Feign 添加spring-cloud-starter-openfeigh依赖: 创建一个Feign接口,添加@FeignClient注解: 在Controller中调用Feign接口: 3. 自定义Feign配置 feign: client: config: default: connectTimeout: // 相当于Request.Options readTimeo

Spring Cloud Eureka 分布式开发之服务注册中心、负载均衡、声明式服务调用实现

介绍 本示例主要介绍 Spring Cloud 系列中的 Eureka,使你能快速上手负载均衡.声明式服务.服务注册中心等 Eureka Server Eureka 是 Netflix 的子模块,它是一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. 服务注册和发现对于微服务架构而言,是非常重要的.有了服务发现和注册,只需要使用服务的标识符就可以访问到服务,而不需要修改服务调用的配置文件.该功能类似于 Dubbo 的注册中心,比如 Zookeeper. Eureka

SpringCloud系列十三:Feign对继承、压缩、日志的支持以及构造多参数请求

1. 回顾 上文讲解了手动创建Feign,比默认的使用更加灵活. 本文将讲解Feign对继承.压缩的支持以及日志和多参数请求的构造等. 2. Feign对继承的支持 Feign支持继承.使用继承,可将一些公共操作分组到一些父接口中,从而简化Feign的开发. 尽管Feign的继承可帮助我们进一步简化开发,但是Spring Cloud指出--通常情况下, 不建议服务器端和客户端之间共享接口,因为这种方式会造成服务器端和客户端代码的紧耦合. 并且,Feign本身并不使用Spring MVC的工作机制

干货分享微服务spring-cloud(5.声明式服务调用feign)

Spring cloud feign基于Netflix feign实现,整合了spring cloud ribbon与spring cloud hystrix,除了提供这两者的强大功能之外,它还提供了一种声明式的web服务客户端定义方式 新建spring boot工程并命名为demo-springcloud-feign-consumer,新建启动类FeignApplication,通过@ EnableFeignClients注解来开启spring cloud feign的功能支持 定义YhqSe

【第三章】声明式服务调用(Feign)

当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻.那么有没有更好的解决方案呢?答案是确定的有,Netflix已经为我们提供了一个框架:Feign. Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数.格

Spring Cloud第七篇 | 声明式服务调用Feign

本文是Spring Cloud专栏的第七篇文章,了解前六篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 Spring Cloud第四篇 | 客户端负载均衡Ribbon Spring Cloud第五篇 | 服务熔断Hystrix Spring Cloud第六篇 | Hystrix仪表盘监控Hy