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

Spring配置GET参数内容协商请求application/rdf+xml返回406异常求解

问题根因

  1. URL参数特殊字符转义问题
    URL 规范中+号默认会被解码为空格,你请求时传入format=application/rdf+xml,Spring 实际拿到的 format 参数值为application/rdf xml,和你在内容协商配置中注册的键application/rdf+xml无法匹配,自然找不到对应的处理方法。你贴的Tomcat日志是原始输入日志,还没经过解码阶段,所以看起来+还存在,实际解码后已经变成空格。
  2. 可选优化点:内容协商键冗余
    你配置的mediaType方法第一个参数是format参数的取值别名,不需要写完整的媒体类型字符串,完全可以用短别名避免特殊字符问题。

解决方法

方法1:对+做URL编码

将请求路径中的+替换为URL编码值%2B,访问地址改为:
http://localhost:8080/test?format=application/rdf%2Bxml
即可正常匹配到testRdf方法。

方法2:修改媒体类型别名(更推荐)

调整内容协商配置,给application/rdf+xml设置短别名,避免特殊字符:

override fun configureContentNegotiation(configurer: ContentNegotiationConfigurer) {
        configurer.favorParameter(true)
            .parameterName("format")
            .ignoreAcceptHeader(false)
            .defaultContentType(MediaType.APPLICATION_JSON)
            .mediaType("text", MediaType.TEXT_PLAIN)
            .mediaType("json", MediaType.APPLICATION_JSON)
            .mediaType("rdf", MediaType("application", "rdf+xml"))
    }

对应的控制器方法不需要修改,请求时直接传短别名即可:
http://localhost:8080/test?format=rdf
这种方式更简洁,也完全规避了特殊字符转义的问题。

补充排查项

如果你确认编码后还是406,可以检查以下两点:

  • 你的Web配置类是否加上了@Configuration注解,且没有被组件扫描排除
  • 方法上的produces属性值是否拼写正确,没有多余空格或符号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:03