Docker化Django与Spring Boot服务间HTTP 400错误排查求助
问题分析与解决方案
问题根源
从Spring Boot日志可见,当请求内容过大时,DispatcherServlet输出parameters={},说明请求的表单参数未被正确解析。这是因为Spring Boot默认使用的Tomcat容器,对application/x-www-form-urlencoded格式的POST请求有默认大小限制(默认值通常为2MB~10MB),当请求体超过该限制时,Tomcat会直接拒绝解析整个表单,导致所有@RequestParam参数无法被获取,最终抛出MissingServletRequestParameterException错误。
解决方案
方案1:调整Spring Boot容器的表单大小限制
通过配置文件增大Tomcat对表单请求的大小限制,同时调整multipart相关配置(若后续涉及文件上传):
application.properties 配置
# 设置表单POST请求的最大大小(示例为100MB,可按需调整) server.tomcat.max-http-form-post-size=104857600 # 配置multipart请求的最大文件/请求大小(若使用multipart格式提交) spring.servlet.multipart.max-file-size=100MB spring.servlet.multipart.max-request-size=100MB
application.yml 配置
server: tomcat: max-http-form-post-size: 104857600 # 100MB,单位为字节 spring: servlet: multipart: max-file-size: 100MB max-request-size: 100MB
方案2:改用JSON格式提交请求(推荐)
application/x-www-form-urlencoded格式并不适合传输大量结构化数据,改用JSON请求体更高效,且能彻底规避表单大小限制问题:
Django侧代码修改
import requests # 直接构造原始Python字典,无需手动序列化JSON payload = { 'document-json-dump': data, 'doc_req_res_params': res_paths, 'doc_req_params': params_data } res = requests.post( f'http://{spring_host}:8080/getTranslatedAsFile/', json=payload # requests会自动设置Content-Type为application/json并完成序列化 )
Spring Boot侧代码修改
- 创建统一的请求DTO类:
import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data public class TranslationRequest { @JsonProperty("document-json-dump") private Document document; @JsonProperty("doc_req_res_params") private DocumentReqResourceParameters docReqResParams; @JsonProperty("doc_req_params") private DocumentReqParameters docReqParams; }
- 修改控制器方法:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @PostMapping(value = "/getTranslatedAsFile/") public String getTranslatedAsFile(@RequestBody TranslationRequest request) { // 直接使用DTO中的对象,无需手动重复反序列化 return documentProcessService.translate( request.getDocReqParams(), request.getDocReqResParams(), request.getDocument() ); }
这种方式不仅解决了大请求问题,还简化了代码逻辑,符合RESTful接口设计规范。
内容的提问来源于stack exchange,提问作者Ilangoven
相关产品推荐
相关产品推荐

