我正在使用具有以下依赖项的Spring Boot 2.0.3.RELEASE:
spring-boot-starter-actuator:2.0.3.RELEASE
micrometer-core:1.0.6
micrometer-registry-prometheus:1.0.6
但是当我调用Prometheus时,我得到的只是
{
"timestamp": 1532426317772,
"status": 406,
"error": "Not Acceptable",
"message": "Could not find acceptable representation",
"path": "/actuator/prometheus"
}
*and/or from browser*
There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation
我还尝试了Spring Boot 2发行的范围为1.0.X的Prometheus,但是没有运气。有人可以提出一些见解吗?非常感谢。
答案 0 :(得分:1)
我们最近遇到了同样的问题。在调试Spring Boot时,我发现我们没有注册可以处理“文本/纯文本” MediaType的HttpMessageConverter,只有“ application / json”。因为Prometheus端点返回“文本/纯文本” MediaType,所以我们添加了一些配置作为临时解决方法。我们添加了一个链接到特定MediaType的StringHttpMessageConverter。
@Configuration
public class ApplicationConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
StringHttpMessageConverter converter = new StringHttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN));
converters.add(converter);
}
}
希望这对您有帮助
答案 1 :(得分:1)
此错误的另一个原因是无效的Spring XML配置文件包含以下内容:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
上面的XML覆盖了messageConverters
中RequestMappingHandlerAdapter
的列表,因此只有列出的转换器可用,在我的情况下,它删除了当/actuator/prometheus
被使用时导致406错误响应的字符串转换器。请求。
答案 2 :(得分:0)
可能不是一个明确的答案,但希望这会有所帮助。 我正在将Prometheus集成到我没有开发的服务中,并且遇到了同样的问题。我将其范围缩小到此代码块(删除使其起作用)
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(GSON);
converters.add(converter);
}
因此检查您的转换方法可能会有所帮助。我制作的存储库是使用jackson而不是gson进行的,所以这就是我要采用的方法。不是理想的解决方案,但缺少更好的解决方案...
答案 3 :(得分:0)
可能是406状态代码,也可以由客户端使用指定的accept标头来解决。
像这样:curl -v -H "Accept: text/plain" url
答案 4 :(得分:0)
如果其他答案没有帮助,则可以将配置添加到ContentNegotiationConfigurer。您可以将defaultContentType设置为“ MediaType.TEXT_PLAIN”。
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.TEXT_PLAIN);
configurer.favorParameter(false);
configurer.favorPathExtension(false);
configurer.parameterName("mediaType");
configurer.useJaf(false);
}
}