spring cloud 使用Eureka中间件调用其他服务API Request method 'POST' not supported问题

首先说一下Eureka作用

  1. 服务注册

在微服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,包括服务的主机与端口号、版本号、通讯协议等一些附加信息。注册中心按照服务名分类组织服务清单,同时还需要以心跳检测的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,以达到排除故障服务的效果。

2. 服务发现

在服务治理框架下,服务间的调用不再通过指定具体的实例地址来实现,而是通过服务名发起请求调用实现。服务调用方通过服务名从服务注册中心的服务清单中获取服务实例的列表清单,通过指定的负载均衡策略取出一个服务实例位置来进行服务调用。

遇到的问题

工作中遇到api为get请求,调用的其他服务api也是get请求,却出现Request method 'POST' not supported错误。下边是解决办法

被调用的api地址,可以看到是get请求


先贴一个错误代码,参数和被调用的服务参数相同,还有请求方式都是get请求。


但是却出现了Request method 'POST' not supported错误

扫描二维码关注公众号,回复: 1810845 查看本文章

后来发现问题出现在Pageable,Pageable的传参方式@RequestBody所以会把get请求转换为post,而被调用的服务为get请求,所以出现了错误。

解决办法:如下


把pageable拆分为两个@RequestParam,实现类如下


另外自定义一个工具类PageFeign

public class PageFeign<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<T> content = new ArrayList<>();
    private boolean last;
    private int totalPages;
    private int totalElements;
    private int numberOfElements;
    private int size;
    private int number;
    private Pageable pageable;

    public PageFeign() {
    }

    public Pageable getPageable() {
        return new PageRequest(number,size);
    }

    public List<T> getContent() { return content; }

    public void setContent(List<T> content) {
        this.content = content;
    }

    public boolean isLast() {
        return last;
    }

    public void setLast(boolean last) {
        this.last = last;
    }

大功告成,主要问题就是使用pageable请求方式问题。

猜你喜欢

转载自blog.csdn.net/qq_39438729/article/details/80782576