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

Spring Boot中redirect:/path重定向不生效,直接返回对应字符串问题

问题根因
  • 你使用了@RestController注解,该注解自带@ResponseBody语义,所有返回值都会直接作为HTTP响应体序列化输出,不会触发Spring MVC的视图解析逻辑,所以redirect:前缀不会被识别为重定向指令,只会被当做普通字符串返回。
  • 你提到项目未使用Spring MVC,而redirect:前缀的重定向逻辑本身就是Spring MVC的视图解析器提供的能力,没有引入Spring MVC的情况下该特性自然不会生效。
解决方案

方案1:手动实现重定向(仅解决重定向失效问题)

直接注入HttpServletResponse对象,调用Servlet原生的sendRedirect方法手动触发3xx重定向,无需依赖Spring MVC的视图能力,代码示例:

@Override
public void getHealthCheck(HttpServletResponse response) throws IOException {
  response.sendRedirect("/actuator/health");
}

注意:该方案仍然需要客户端访问/actuator/health时拥有权限,无法解决你部署环境下actuator接口返回401的问题。

方案2:直接返回健康检查结果(推荐,可同时解决401问题)

不需要走重定向逻辑,直接在你的可公开访问接口中注入Actuator的HealthEndpoint Bean,服务内部调用获取健康状态后直接返回,绕开端点的权限拦截:

@RestController
@Api(value = ConsentConstants.GET_HEALTH_V1, tags = {ConsentConstants.SWAGGER_API})
@Slf4j
@FieldDefaults(level = AccessLevel.PRIVATE)
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class GetHealthController implements GetHealthApi {

  final Tracer tracer;
  // 注入Actuator健康检查端点Bean
  final HealthEndpoint healthEndpoint;

  @Override
  public Object getHealthCheck() {
    return healthEndpoint.health();
  }
}

该方式相当于通过你已验证可正常访问的端点对外暴露健康状态,不需要跳转访问actuator原生端点,也就不会触发401权限校验。

内容的提问来源于stack exchange,提问作者Boommeister

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:24:02