HttpClientResponseException:空主体
HttpClientResponseException: Empty body
我对使用 declarative http client
感到困惑。
我正在尝试创建一个 declarative http client
。但是我收到了这个错误。
15:34:16.455 [pool-1-thread-1] ERROR i.m.r.intercept.RecoveryInterceptor - Type [micronaut.http.client.repository.ItunesClient$Intercepted] executed with error: Empty body
io.micronaut.http.client.exceptions.HttpClientResponseException: Empty body
at io.micronaut.http.client.BlockingHttpClient.lambda$retrieve[=10=](BlockingHttpClient.java:140)
at java.util.Optional.orElseThrow(Optional.java:290)
at io.micronaut.http.client.BlockingHttpClient.retrieve(BlockingHttpClient.java:140)
at io.micronaut.http.client.interceptor.HttpClientIntroductionAdvice.intercept(HttpClientIntroductionAdvice.java:535)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:146)
at io.micronaut.retry.intercept.RecoveryInterceptor.intercept(RecoveryInterceptor.java:73)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:146)
at micronaut.http.client.repository.ItunesClient$Intercepted.search(Unknown Source)
at micronaut.http.client.controller.MusicController.search(MusicController.java:37)
at micronaut.http.client.controller.$MusicControllerDefinition$$exec1.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2694)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:295)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter(RoutingInBoundHandler.java:1358)
如果我像这样将 List<Album>
更改为 String
就可以了。
public String search(String searchTerm, @Nullable @QueryValue String maxResults) {
log.info("searchTerm : {}",searchTerm);
log.info("maxResults : {}",maxResults);
final int limit;
if(StringUtils.isDigits(maxResults)) {
limit = Math.min(25, Integer.parseInt(maxResults));
} else {
limit = 25;
}
String result = itunesClient.search(searchTerm, limit);
return result;
}
iTunes 客户端
@Get("/search?limit={maxResults}&media=music&entity=album&term={term}")
String search(String term, int maxResults);//From SearchResults to String
在src/main/resources/application.yml
中设置这个...
micronaut:
codec:
json:
additionalTypes:
- text/javascript
这是必需的,因为从 Apple 返回的响应内容类型。有关示例,请参阅 https://github.com/jeffbrown/music-search/blob/30cda075cb8e9450ff920349ca5d5e986db32fbf/music-service/src/main/resources/application.yml#L13-L16。
我对使用 declarative http client
感到困惑。
我正在尝试创建一个 declarative http client
。但是我收到了这个错误。
15:34:16.455 [pool-1-thread-1] ERROR i.m.r.intercept.RecoveryInterceptor - Type [micronaut.http.client.repository.ItunesClient$Intercepted] executed with error: Empty body
io.micronaut.http.client.exceptions.HttpClientResponseException: Empty body
at io.micronaut.http.client.BlockingHttpClient.lambda$retrieve[=10=](BlockingHttpClient.java:140)
at java.util.Optional.orElseThrow(Optional.java:290)
at io.micronaut.http.client.BlockingHttpClient.retrieve(BlockingHttpClient.java:140)
at io.micronaut.http.client.interceptor.HttpClientIntroductionAdvice.intercept(HttpClientIntroductionAdvice.java:535)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:146)
at io.micronaut.retry.intercept.RecoveryInterceptor.intercept(RecoveryInterceptor.java:73)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:146)
at micronaut.http.client.repository.ItunesClient$Intercepted.search(Unknown Source)
at micronaut.http.client.controller.MusicController.search(MusicController.java:37)
at micronaut.http.client.controller.$MusicControllerDefinition$$exec1.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2694)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:295)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter(RoutingInBoundHandler.java:1358)
如果我像这样将 List<Album>
更改为 String
就可以了。
public String search(String searchTerm, @Nullable @QueryValue String maxResults) {
log.info("searchTerm : {}",searchTerm);
log.info("maxResults : {}",maxResults);
final int limit;
if(StringUtils.isDigits(maxResults)) {
limit = Math.min(25, Integer.parseInt(maxResults));
} else {
limit = 25;
}
String result = itunesClient.search(searchTerm, limit);
return result;
}
iTunes 客户端
@Get("/search?limit={maxResults}&media=music&entity=album&term={term}")
String search(String term, int maxResults);//From SearchResults to String
在src/main/resources/application.yml
中设置这个...
micronaut:
codec:
json:
additionalTypes:
- text/javascript
这是必需的,因为从 Apple 返回的响应内容类型。有关示例,请参阅 https://github.com/jeffbrown/music-search/blob/30cda075cb8e9450ff920349ca5d5e986db32fbf/music-service/src/main/resources/application.yml#L13-L16。