使用Karate测试PDF文件上传时遭遇415不支持媒体类型错误
解决Karate测试PDF上传时的415 Unsupported Media Type错误
我尝试用Karate框架测试PDF文件上传功能,却碰到了415 Unsupported Media Type错误。
后端接口代码
@Controller @RequestMapping("/files") public class UploadController { @PostMapping public @RequestMapping( value = "/upload", produces = {"application/json", "application/problem+json", "application/pdf"}, consumes = {"multipart/form-data"} ) String upload(@RequestParam("myFile") MultipartFile file) throws Exception { return "Success"; } }
Karate测试代码
Scenario: Upload a pdf file Given path '/files/upload' And header Accept = 'application/pdf' And multipart file myFile = { read: 'test.pdf',fileName: 'test.pdf', contentType: 'application/pdf' } When method post Then status 200
错误信息
status code was: 415, expected: 200, response time in milliseconds: 5, url: http://localhost:61761/files/upload, response: {"title":"Unsupported Media Type","status":415,"detail":"Content-Type 'application/json;boundary=22459011c7e35efa' is not supported"}
问题原因及解决方案
核心问题:Spring注解使用错误
后端代码中同时混用@PostMapping和@RequestMapping注解,导致接口的consumes配置(要求multipart/form-data)未被正确识别,后端无法解析multipart类型请求,从而返回415错误。
修正后的后端代码
将@RequestMapping的属性合并到@PostMapping中,规范注解使用:
@Controller @RequestMapping("/files") public class UploadController { @PostMapping( value = "/upload", produces = {"application/json", "application/problem+json", "application/pdf"}, consumes = {"multipart/form-data"} ) public String upload(@RequestParam("myFile") MultipartFile file) throws Exception { return "Success"; } }
额外注意点
- 确保Karate测试中的PDF文件路径正确,若文件在classpath下,建议写成
read: 'classpath:test.pdf' - 后端返回字符串
"Success",但测试中设置Accept = 'application/pdf'可能导致内容类型不匹配,可将Accept改为application/json或调整后端返回类型以适配需求
内容的提问来源于stack exchange,提问作者user3687406
相关产品推荐
相关产品推荐

