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

Spring Boot如何让GET接口允许接收任意Content-Type请求头?

Spring Boot如何让GET接口允许接收任意Content-Type请求头?

嘿,这个问题我之前踩过坑!先给你理清楚报错原因:你用的是GET接口,但客户端发了multipart/form-data的请求头——按HTTP规范来说,GET请求本来就不该带请求体,而multipart/form-data是用来上传文件的,通常和POST搭配。Tomcat会自动尝试解析这类请求,但GET请求没有请求体,自然找不到multipart请求必需的boundary,就抛出那个错误了。

下面给你两种可行的解决办法,按需选择:

方法一:直接指定接口接受任意Content-Type

修改你的Controller方法,通过consumes属性明确指定接受所有类型的Content-Type,因为是GET请求我们不需要处理multipart内容,直接写业务逻辑即可:

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class YourController {

    @GetMapping(value = "/logic", consumes = MediaType.ALL_VALUE)
    public ResponseEntity<HttpStatus> appLogic() {
        // 你的业务逻辑
        return ResponseEntity.ok(HttpStatus.OK);
    }
}

如果这种方式还是触发Tomcat的multipart解析检查,那就试试第二种方法。

方法二:自定义解析器跳过特定请求的multipart检查

我们可以写一个自定义的Multipart解析器,让它对GET请求的/logic接口跳过multipart解析,这样就不会触发boundary检查了:

import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;

@Component
public class CustomMultipartResolver extends CommonsMultipartResolver {
    @Override
    public boolean isMultipart(HttpServletRequest request) {
        // 判断请求方法是GET且路径是/logic时,不认为是multipart请求
        if ("GET".equalsIgnoreCase(request.getMethod()) && "/logic".equals(request.getRequestURI())) {
            return false;
        }
        return super.isMultipart(request);
    }
}

最后提一句:其实从REST设计规范来讲,GET请求携带请求体(包括multipart类型)是不符合规范的,最好能让客户端调整请求方式或者Content-Type。但如果必须兼容这种场景,上面的方法就能解决问题啦。

备注:内容来源于stack exchange,提问作者TomJava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:49:14