You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:01:12