簡體   English   中英

無法在服務中自動裝配 FeignClient

[英]Could not autowire FeignClient in service

我有一個簡單的 API,它使用 FeignClient 調用其他 api 並獲取訪問令牌。 但是今天我不明白為什么我的客戶是空的。

你能解釋為什么在運行時,我的假客戶是 null 嗎?

@SpringBootApplication
@EnableFeignClients
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

我的控制器

@RestController
@RequestMapping("/api")
public class AppController {

    private final MyService myService = new MyService();
}

我的服務

@Service
public class MyService {

    @Autowired
    private MyClient myClient;

  public AccessToken applicationLogin(final LoginParameters loginParameters) {
        return myClient.getAccessToken(loginParameters);
    }
}

我的客戶

@FeignClient(name = "myClient", url = "https://myurl.com")
public interface MyClient {

    @PostMapping("/auth/login")
    AccessToken getAccessToken(@RequestBody LoginParameters loginParameters);
}

錯誤

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException: null

您使用錯誤的變量來調用方法而不是r2aClient您應該 ise myClient

public AccessToken applicationLogin(final LoginParameters loginParameters) {
    return myClient.getAccessToken(loginParameters);
}

根據新更改進行編輯

我猜@EnableFeignClient找不到類 MyClient,試試@EnableFeignClient(basePackages = "<your package for MyClient>)

我認為您必須在Controller注入Service 您將服務創建為普通 Java 類,因此不會注入MyClient

@RestController
@RequestMapping("/api")
public class AppController {
    @Autowired
    private final MyService myService;
}

不使用

new MyService();

如果使用'new',它不會被spring管理。 你可以檢查一下

@RestController
public class MyController {
    
    private IMyService iMyService = new MyServiceImpl();
}
@Service
public class MyServiceImpl implements IMyService {

   @Autowired
   private MyMapper myMapper;

  //....

}

myMapper 將始終為 null.cuz 您由 new 創建它。 順便說一句,從 Spring 4 開始,不推薦現場注入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM