如何使用REST Assured在POST请求中传递@RequestParam参数
问题根源
你的接口是multipart/form-data类型的文件上传接口,所有@RequestParam参数都需要放在请求体的表单字段中,你目前用queryParam将metadata参数放在了URL查询串里,服务端从请求体中读取不到对应参数,所以返回400错误。
具体错误点
- 传参方式错误:
queryParam是将参数拼接到URL末尾,而文件上传接口要求参数放在multipart格式的请求体中,需要用Rest Assured的multiPart方法传递表单字段 - 未正确声明multipart请求格式:Rest Assured不会自动识别文件上传场景,调用
multiPart方法后才会自动设置正确的Content-Type请求头
修正后的代码
public void havePostCall(String endpoint) throws IOException { String url = be.getBaseUrl() + endpoint; String reqPayload; // 用try-with-resources自动关闭输入流,避免资源泄漏 try (FileInputStream fisFile = new FileInputStream(new File("替换为你的json文件实际路径"))) { reqPayload = IOUtils.toString(fisFile, "UTF-8"); } Response rs = RestAssured.given() .header("Authorization", "替换为实际的token值") // 用multiPart传递表单字段metadata .multiPart("metadata", reqPayload) // 如果需要上传文件,放开下面这行注释,替换为实际文件路径即可,不需要上传则直接省略 // .multiPart("file", new File("替换为要上传的文件路径")) .when() .post(url) .then() .assertThat() .statusCode(200) .extract() .response(); System.out.print("Response is ==" + rs.asString()); }
如果服务端要求即使不上传文件也要携带空的file字段,可以额外加一行.multiPart("file", new MultipartFile[0])适配即可。
内容的提问来源于stack exchange,提问作者niya
相关产品推荐
相关产品推荐

