feign api Ambiguous mapping

当在SpringMVC环境中使用Feign时,由于Spring默认扫描@Controller和@RequestMapping,可能导致API映射重复,从而出现Ambiguous mapping错误。为避免此问题,可以通过配置仅扫描带有@Controller注解的类。
摘要由CSDN通过智能技术生成

SpringMVC默认扫描所有带有@Controller或@RequestMapping的类和方法,如果找不到还会去父类或父接口中去找

这样像feign的那种写api,controller实现api的写法,就会被扫描两次,报Ambiguous mapping错误,可以通过以下配置,只扫描带有@Controller的类。

@Configuration
@ConditionalOnClass({Feign.class})
public class FeignConfig {

    @Bean
    public WebMvcRegistrations feignWebRegistrations() {
        RequestMappingHandlerMapping handlerMapping = this.requestMappingHandlerMapping();
        return new WebMvcRegistrations() {
            @Override
            public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
                return handlerMapping;
            }
        };
    }

    /**
     * 使SpringMVC只扫描带有@Controller的@RequestMapping,而忽略掉带有@RequestMapping的FeignClient的接口,从而避免启动报Am
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Feign 是 Netflix 开源的一款声明式 HTTP 客户端,用于简化 HTTP API 的调用过程。它可以让你通过注解的方式非常方便地发送 HTTP 请求,并处理响应数据。 ### 使用 Feign 访问百度API 首先,你需要添加 Feign 和依赖到你的项目中。如果你使用的是 Spring Boot,通常会在 `pom.xml` 或者 `build.gradle` 文件中添加相应的依赖: #### Maven 示例 ```xml <dependencies> <!-- 添加 Feign 依赖 --> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId> <version>10.x.y</version> </dependency> <!-- 添加 Jackson JSON 库依赖,用于序列化和反序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.x.y</version> </dependency> <!-- 添加 OkHttp 作为底层 HTTP 客户端 --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.x.y</version> </dependency> </dependencies> ``` 接下来,在你的代码中创建一个 Feign 接口: ```java import com.google.gson.Gson; import feign.Feign; import feign.Logger; public class BaiduApiService { private static final Logger.Level FEIGN_LOG_LEVEL = Logger.Level.BASIC; // 可选择 BASIC、OFF 或者 FULL 等 public static void main(String[] args) { // 创建 FeignClient 实例并配置日志级别 Gson gson = new Gson(); Feign.Builder builder = Feign.builder() .encoder(new GsonEncoder(gson)) .decoder(new GsonDecoder(gson)) .logLevel(FEIGN_LOG_LEVEL); BaiduApiService api = builder.target(BaiduApiService.class, "https://www.baidu.com"); String result = api.getBaiduSearchResult("示例查询内容"); System.out.println(result); } interface BaiduApiService { @GET("/s") String getBaiduSearchResult(@QueryParam("wd") String query); } } ``` 在这个例子中,我们创建了一个名为 `BaiduApiService` 的 Feign 接口,并使用了默认的 `OkHttpClient` 作为底层的 HTTP 客户端。我们通过 `@GET` 注解指定了请求的方法以及 URL 中的查询参数 `wd`。 ### 相关问题: 1. **如何自定义 Feign 日志记录?** - 可以通过调整 `Logger.Level` 来改变日志级别的详细程度。 2. **为什么需要引入 Jackson JSON 库?** - Feign 默认使用 JSON 格式传输数据,Jackson 提供了强大的 JSON 序列化和反序列化功能,因此需要添加 Jackson 的依赖库。 3. **如果使用 Spring Boot 集成 Feign 怎么操作?** - 可以在Spring Boot应用的配置文件 (`application.properties` 或 `application.yml`) 中指定 Feign 的客户端配置项,例如超时时间、连接池大小等。同时可以在 Spring Bean 中注入 Feign 接口实例来进行使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值