Spring Boot默认返回类型配置及带produces接口406错误咨询
问题分析与解决方案
你的问题核心是:全局配置的默认内容类型(JSON)和接口指定的produces类型(二进制流)不匹配,导致Spring无法找到符合要求的响应类型,返回406错误。
原因说明
当接口设置了produces属性后,Spring会严格限定该接口允许返回的内容类型。尽管你开启了ignoreAcceptHeader=true,但全局配置的defaultContentType(MediaType.APPLICATION_JSON)不在该接口produces的允许范围内,因此请求匹配失败,触发406(Not Acceptable)错误。
解决办法
你可以通过路径匹配的默认内容类型策略适配不同接口的需求,让全局配置根据请求路径自动切换默认类型:
@Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.ignoreAcceptHeader(true) .defaultContentTypeStrategy(request -> { // 根据请求路径判断要使用的默认内容类型 String requestUri = request.getRequestURI(); if (requestUri.startsWith("/test/")) { return Collections.singletonList(MediaType.APPLICATION_OCTET_STREAM); } // 其他接口默认返回JSON return Collections.singletonList(MediaType.APPLICATION_JSON); }); }
配置后,访问/test/{testId}路径时,默认内容类型会自动切换为APPLICATION_OCTET_STREAM,和接口的produces属性匹配,不会再出现406错误;其他未指定produces的接口依然保持JSON作为默认类型。
补充说明
如果你的二进制流接口不止这一个,也可以通过更通用的规则(比如路径包含attachment、download等关键词)来匹配,或者为这类接口单独配置内容协商规则,只要确保默认类型落在接口produces的允许范围内即可。
内容的提问来源于stack exchange,提问作者user19282140
相关产品推荐
相关产品推荐

