无法在服务中自动连接FeignClient



我有一个简单的API,它使用FeignClient来调用其他API并获得访问令牌。但是今天我不明白为什么我的客户端是空的。

你能解释一下为什么在运行时,我的伪客户端是空的吗?

@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,您应该使用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将始终为空。因为你用new创造了它。顺便说一下,从Spring 4开始,不建议使用字段注入

相关内容

  • 没有找到相关文章

最新更新