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

Spring Framework中心跳服务的正确实现及404问题排查

问题根源

你代码里的ServerResponse是Spring WebFlux(响应式Web框架)的组件,但你使用的是基于@Controller的Spring MVC(传统Servlet栈),两者编程模型不兼容,Spring MVC无法识别ServerResponse类型的返回值,导致接口无法被正确映射,出现404错误。

正确实现方式

以下两种Spring MVC原生的实现方式,都可以实现仅返回200状态码的心跳接口:

方式一:使用ResponseEntity<Void>

这种方式可以明确控制响应状态码和响应体(指定Void表示无响应体):

import org.springframework.http.ResponseEntity;
// 其他import保持不变

@CrossOrigin(origins = "*")
@Controller
@RequestMapping(path = "/status")
public class StatusController {

    private static final Logger logger = LoggerFactory.getLogger(StatusController.class);

    @CrossOrigin(origins = "*")
    @GetMapping(path = "/heartbeat")
    public ResponseEntity<Void> getHeartbeat() {
        logger.info("checking heartbeat");
        return ResponseEntity.ok().build();
    }

    // hello方法保持不变
}

方式二:使用@ResponseStatus注解

如果不需要精细控制响应体,仅需返回200状态码,这种方式更简洁:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
// 其他import保持不变

@CrossOrigin(origins = "*")
@Controller
@RequestMapping(path = "/status")
public class StatusController {

    private static final Logger logger = LoggerFactory.getLogger(StatusController.class);

    @CrossOrigin(origins = "*")
    @GetMapping(path = "/heartbeat")
    @ResponseStatus(HttpStatus.OK)
    public void getHeartbeat() {
        logger.info("checking heartbeat");
    }

    // hello方法保持不变
}
额外说明
  • 两种方式部署后,调用mysite.com/myapp/status/heartbeat都会返回200状态码且无响应体,符合心跳检测的需求。
  • 从hello接口正常工作来看,当前环境是Spring MVC,无需调整依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:47:23