如何修改Spring Boot Actuator端点响应的Content-Type头适配Admin
解决Spring Boot Actuator响应头Content-Type不匹配Spring Boot Admin的问题
方法一:通过ResponseBodyAdvice全局修改Actuator端点响应头
实现ResponseBodyAdvice接口,精准针对Actuator路径的请求调整响应头:
import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; @ControllerAdvice public class ActuatorContentTypeAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { // 对所有请求放行,后续通过路径判断是否修改响应头 return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> converterType, ServerHttpRequest request, ServerHttpResponse response) { String requestPath = request.getURI().getPath(); if (requestPath.startsWith("/actuator/")) { // 设置Spring Boot Admin要求的Content-Type(带+json后缀保证格式兼容性) response.getHeaders().setContentType(MediaType.valueOf("application/vnd.spring-boot.actuator.v2+json")); } return body; } }
方法二:使用Filter拦截Actuator请求并修改响应头
自定义Filter拦截所有Actuator路径请求,在响应返回前调整头信息:
// Spring Boot 3.x 用jakarta.servlet包,2.x替换为javax.servlet包 import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import java.io.IOException; @Component public class ActuatorContentTypeFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; HttpServletRequest httpRequest = (HttpServletRequest) request; // 先执行后续请求逻辑 chain.doFilter(request, response); // 仅对Actuator路径修改响应头 if (httpRequest.getRequestURI().startsWith("/actuator/")) { httpResponse.setHeader("Content-Type", "application/vnd.spring-boot.actuator.v2+json"); } } }
方法三:检查版本兼容性
如果上述方法无效,请确认Spring Boot与Spring Boot Admin的版本匹配:
- Spring Boot 2.x 对应 Spring Boot Admin 2.x 系列
- Spring Boot 3.x 对应 Spring Boot Admin 3.x 系列
版本不兼容会导致MediaType要求不一致,优先确保版本对齐可避免此类问题。
内容的提问来源于stack exchange,提问作者Aakash Jain
相关产品推荐
相关产品推荐

