Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?

Posted

技术标签:

【中文标题】Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?【英文标题】:Spring Boot Actuator /env endpoint returning data as XML - why?Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为什么? 【发布时间】:2015-07-10 06:25:00 【问题描述】:

我们有几个 Spring Boot 应用程序作为微服务运行。它们中的每一个都在运行 spring boot 执行器,以允许我们监控 /metrics、/env、/health 等。在其中一个服务上,/env 端点在浏览器中请求时以 XML 格式返回数据。此外,XML 无效,但我真正关心的是让端点以 json 格式返回数据。 XML 无效的原因是因为我们使用的是 Spring Cloud Config,并且第一个元素包含 GitHub URL,这使其无效。

<LinkedHashMap xmlns=""><profiles>development</profiles><configService:https://github.com/ourcompany/configs/usage.yml>

我找不到关于这个项目的任何不同之处,可以让数据以 json 格式返回。

如果我使用 cURL 并传递带有 value = application/json 的 Accept 标头,服务将正确返回 json,但为什么浏览器返回 XML?我还注意到这个服务是我可以通过 Accept = application/xml 并让它返回 XML,但我的其他服务在请求 XML 时返回 406 Not Acceptable 响应。奇怪。

我们正在使用 spring-boot-starter-parent 版本 1.2.2.RELEASE 以及 spring-cloud-starter 1.0.0.RELEASE。

【问题讨论】:

在发布后注意到如果我请求 /env.json 我可以获取 json 中的数据,所以这可能会解决问题,但它仍然引出了一个问题,为什么这项服务允许 XML被退回,但其他人返回 406? 在依赖项中有jackson-dataformat-xml 的机会吗?如果可用,XmlMapper 将被自动配置。或者在返回的对象上添加 @XmlRootElement 注释,在这种情况下可能会使用 JAXB。 【参考方案1】:

ci_ 上面的评论是正在发生的事情。拥有 XmlMapper 会导致执行器端点返回 XML。点击 /env.json 端点将为我解决问题。

【讨论】:

以上是关于Spring Boot Actuator /env 端点以 XML 形式返回数据 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Spring Boot Actuator“/actuator”端点

spring-boot 监控 Actuator

关于spring boot启动监控端点的方法(spring-boot-starter-actuator)

Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置

Spring Boot -- actuator

spring-boot-starter-actuator监控接口详解