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

Spring控制器方法需返回String或SseEmitter时,应指定何种返回类型?

Spring控制器方法返回String或SseEmitter的返回类型选择

你可以把方法的返回类型指定为Object,Spring MVC会自动根据实际返回的对象类型来处理响应:

@GetMapping("/test")
public Object test() {
    if (MyCondition) {
        SseEmitter emitter = new SseEmitter();
        // 填充SseEmitter数据的逻辑
        return emitter;
    } else {
        return "String";
    }
}

为什么可以这么做?

Spring MVC的请求处理器支持灵活的返回类型,当方法返回Object时,框架会:

  • 如果返回的是String,会将其作为文本响应返回(默认UTF-8编码,Content-Type为text/plain)
  • 如果返回的是SseEmitter,会自动触发服务器发送事件(SSE)的处理流程,保持连接并发送事件数据

进阶方案:用ResponseEntity增强控制

如果需要统一设置响应状态码、响应头(比如给String响应自定义Content-Type,给SseEmitter设置超时头),可以用ResponseEntity<Object>作为返回类型:

@GetMapping("/test")
public ResponseEntity<Object> test() {
    if (MyCondition) {
        SseEmitter emitter = new SseEmitter(60000L); // 设置60秒超时
        // 填充SseEmitter数据的逻辑
        return ResponseEntity.ok(emitter);
    } else {
        return ResponseEntity.ok()
                .contentType(MediaType.TEXT_PLAIN)
                .body("String");
    }
}

注意事项

  • 处理SseEmitter时建议设置超时时间,并添加异常处理器,避免连接长时间占用导致资源泄漏
  • 确保你的Spring版本在4.2及以上(该版本开始支持SseEmitter)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:52:02