Ожидаемый результат возвращается, но за ним следует StackOverflow.
Я пытаюсь вызвать этот API: https:// api-ninjas.com/api/quotes
Код: Выделить всё
@Test
public void getQuotesTest() {
Quote[] quotes = reportsService.getQuotes("happiness");
for (Quote quote : quotes) {
System.out.println("!!!!!!" + quote);
}
}
Код: Выделить всё
package blossom.reports_service.model;
public class Quote {
private String quote;
private String author;
public Quote() {
}
public Quote(String quote, String author) {
this.quote = quote;
this.author = author;
}
// Getters and setters
public String getQuote() {
return quote;
}
public void setQuote(String quote) {
this.quote = quote;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Quote{" +
"quote='" + quote + '\'' +
", author='" + author + '\'' +
'}';
}
}
Код: Выделить всё
public Quote[] getQuotes(String category) {
// return if list is not empty, otherwise throw exception
Quote[] quotes = quotesClient.getQuotes(apiKey, category);
if (quotes.length == 0) {
throw new NotFoundException("No quotes found for the given category");
}
return quotes;
}
Код: Выделить всё
@FeignClient(name = "quotesClient", url = "https://api.api-ninjas.com/v1/")
public interface QuotesServiceClient {
@GetMapping("/quotes")
Quote[] getQuotes(@RequestHeader("X-Api-Key") String apiKey, @RequestParam("category") String category);
}
Код: Выделить всё
java.lang.StackOverflowError: null
at java.base/java.lang.invoke.MethodType.insertParameterTypes(MethodType.java:487) ~[na:na]
MethodType.java:487
at java.base/java.lang.invoke.MethodHandles.dropArgumentsTrusted(MethodHandles.java:5367) ~[na:na]
MethodHandles.java:5367
at java.base/java.lang.invoke.StringConcatFactory.generateMHInlineCopy(StringConcatFactory.java:534) ~[na:na]
StringConcatFactory.java:534
at java.base/java.lang.invoke.StringConcatFactory.makeConcatWithConstants(StringConcatFactory.java:365) ~[na:na]
StringConcatFactory.java:365
at java.base/java.lang.invoke.BootstrapMethodInvoker.invoke(BootstrapMethodInvoker.java:102) ~[na:na]
BootstrapMethodInvoker.java:102
at java.base/java.lang.invoke.CallSite.makeSite(CallSite.java:316) ~[na:na]
CallSite.java:316
at java.base/java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:274) ~[na:na]
MethodHandleNatives.java:274
at java.base/java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:264) ~[na:na]
MethodHandleNatives.java:264
at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:374) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:374
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:487) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:487
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
Iterable.java:75
at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:317) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:317
at org.springframework.context.support.DefaultLifecycleProcessor.stop(DefaultLifecycleProcessor.java:190) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:190
at org.springframework.context.support.AbstractApplicationContext.stop(AbstractApplicationContext.java:1526) ~[spring-context-6.1.5.jar:6.1.5]
AbstractApplicationContext.java:1526
at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:361) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:361
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:487) ~[spring-context-6.1.5.jar:6.1.5]
DefaultLifecycleProcessor.java:487
- Издевался над клиентом Feign: гарантировал, что клиент Feign правильно имитируется вернуть заранее определенный ответ.
- Упрощенный контекст Spring: создан минимальный тестовый контекст Spring Boot, чтобы изолировать проблему.
Код: Выделить всё
@SpringBootTest
@ExtendWith(SpringExtension.class)
public class SimplifiedReportsServiceTest {
@MockBean
private QuotesServiceClient quotesClient;
@Autowired
private ReportsService reportsService;
@Test
public void getQuotesTest() {
Quote[] mockQuotes = new Quote[]{new Quote("Happiness is a journey, not a destination.")};
when(quotesClient.getQuotes(anyString(), anyString())).thenReturn(mockQuotes);
Quote[] quotes = reportsService.getQuotes("happiness");
for (Quote quote : quotes) {
System.out.println("!!!!!!" + quote);
}
}
}
Спасибо за вашу помощь!
Подробнее здесь: https://stackoverflow.com/questions/785 ... ign-client
Мобильная версия