sse报错org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
时间: 2025-01-03 08:28:43 浏览: 50
### 解决 Spring SSE 中 `HttpMediaTypeNotAcceptableException` 错误
当遇到 `org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation` 的错误时,通常意味着服务器无法提供客户端请求的内容类型。对于 Server-Sent Events (SSE),这种问题尤为常见。
#### 1. 媒体类型配置不当
如果控制器方法指定了特定的媒体类型而这些类型的转换器未被注册,则会引发此异常。确保应用程序上下文中已经包含了能够处理所需 MIME 类型的消息转换器[^1]。
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.TEXT_EVENT_STREAM));
converters.add(converter);
}
}
```
上述代码展示了如何向消息转换器列表中添加支持 `text/event-stream` 类型的支持[^4]。
#### 2. 控制器端点定义不合理
检查 RESTful API 接口上的 `@RequestMapping` 或者其他映射注解是否正确设置了生产/消费属性。特别是针对 SSE 请求应该指定合适的 media type 参数:
```java
@GetMapping(value="/stream", produces="text/event-stream")
@ResponseBody
public SseEmitter stream() throws IOException{
final SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
// ... 设置超时和其他逻辑 ...
return emitter;
}
```
这里通过设置 `produces` 属性来明确告知框架只响应那些 Accept 头部包含 `text/event-stream` 的 HTTP GET 请求[^3]。
#### 3. 客户端发送了不兼容的 Accept Header
确认前端发出的 AJAX 调用或者其他方式发起的网络请求确实携带了正确的 Accept 字段值为 `"text/event-stream"` 。浏览器原生 EventSource 对象默认就会这样做;但如果使用的是自定义 XHR/Fetch 实现则需特别注意这一点[^2]。
---
阅读全文