【问题标题】:Feign UnsatisfiedDependecyException when running my spring boot app运行我的 Spring Boot 应用程序时 Feign UnsatisfiedDependecyException
【发布时间】:2019-06-23 00:57:31
【问题描述】:

我有一些为我的 Spring Boot 应用程序编写的假客户端

这是我的代码

首先是一个控制器,我在其中使用我的 feign 客户端

package demo.notification;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import demo.shema.Feign.NotifFeignClient;
import demo.shema.dto.NotificationDTO;

@RestController
@RequestMapping(NotificationRestMediator.API)
public class NotificationRestMediator {
    public static final String API ="notif";

    @Autowired
    private NotifFeignClient notifFeignClient;

    @GetMapping
    List<NotificationDTO> getAllNotifications(){
        return notifFeignClient.getAll();
    }
}

那么我的feign客户端如下

package demo.shema.Feign;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import demo.shema.dto.NotificationDTO;

@FeignClient("Notification")
public interface NotifFeignClient {

    public static final String NOTIF = "notif";

    @GetMapping(NOTIF)
    List<NotificationDTO> getAll();

    @PutMapping(NOTIF)
    Boolean setNotif(@RequestBody NotificationDTO notif,@RequestParam String principal);

    @PostMapping(NOTIF)
    NotificationDTO createNotif(@RequestBody NotificationDTO notif,@RequestParam String principal);

    @DeleteMapping(NOTIF)
    Boolean deleteNotif(@RequestParam Long notifID,@RequestParam String principal);

}

我的 feign 配置在使用注解的主类和下面的另一个配置类中

@SpringBootApplication
@EnableOAuth2Sso
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients(basePackageClasses = { AppClientFeign.class })
@RibbonClients({ @RibbonClient(name = "COMPONENTS"), @RibbonClient(name = "USERS-MANAGER") })
@ComponentScan(basePackageClasses = { ClientApplication.class , AppClientFeign.class })

那么类配置是

@Configuration
@EnableFeignClients
@ImportAutoConfiguration({RibbonAutoConfiguration.class, FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class})
public class FeignConfig {

}

那么异常错误详情如下

创建名为“notificationRestMediator”的 bean 时出错:不满意 通过字段“notifFeignClient”表示的依赖关系;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“demo.shema.Feign.NotifFeignClient”的 bean 时出错: FactoryBean 在创建对象时抛出异常;嵌套异常是 java.lang.IllegalStateException:RequestParam.value() 为空 参数1

怎么办?

【问题讨论】:

  • 我觉得是bug,你可以这样试试Boolean setNotif(@RequestBody NotificationDTO notif,@RequestParam("principal") String principal);
  • 请添加您的评论作为答案,以及我在某些项目中使用 spring boot 2.x 的解释,该项目使用最新的 feign 依赖项,其中 requestParam 值不是强制性的,但在重构为 spring boot 1.5.6 之后这成为强制性的

标签: java spring spring-boot


【解决方案1】:

这是一个错误here,正如你所说的最新版本不需要指定值,但对于旧版本需要指定值

@PutMapping(NOTIF)
Boolean setNotif(@RequestBody NotificationDTO notif,@RequestParam("principal") String principal);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2018-05-18
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多