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

Spring MVC带produces指令的请求排序及优先级配置问题

解决Spring WebFlux同路径接口优先匹配流响应的问题

你遇到的问题是Spring在匹配请求时,默认对application/json的优先级高于text/event-stream,即使客户端Accept头同时包含两者。可以通过以下两种方式调整优先级:

方法一:给目标接口的媒体类型设置更高权重(q值)

在streamCompletions方法的produces参数中,给text/event-stream显式指定更高的质量值(q值),让Spring优先选择这个接口:

@PostMapping(path = "/api/v1/chat/completions", produces = {"text/event-stream;q=1.0"})
public Flux<String> streamCompletions(@RequestBody ChatCompletionsOptions chatCompletionsOptions) {
    log.info("Request 1");
    return null;
}

@PostMapping(path = "/api/v1/chat/completions", produces = {"application/json;q=0.8"})
public Mono<ChatCompletions> jsonCompletions(@RequestBody ChatCompletionsOptions chatCompletionsOptions) {
    log.info("Request 2");
    return null;
}

当客户端Accept头包含多个同权重的媒体类型时,Spring会优先选择produces中q值更高的接口。

方法二:全局配置内容协商优先级(不推荐,影响所有接口)

如果需要全局让text/event-stream优先,可以在WebFlux配置类中修改内容协商规则:

@Configuration
public class WebConfig implements WebFluxConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        // 设置默认响应类型为text/event-stream
        configurer.defaultContentType(MediaType.TEXT_EVENT_STREAM)
                  // 注册媒体类型别名,可选
                  .mediaType("stream", MediaType.TEXT_EVENT_STREAM)
                  .mediaType("json", MediaType.APPLICATION_JSON)
                  // 不忽略Accept头,按头匹配
                  .ignoreAcceptHeader(false);
    }
}

这种方式会影响所有接口的匹配逻辑,仅适合全局需要流响应优先的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:33:22