我正在尝试RestTemplate
调用一些接受图像文件的 API,然后将其进一步写入/上传到其服务器上。
下面是我尝试使用以下方式调用的 Postman 中的 API 快照RestTemplate
现在为了调用此 API,我编写了一个用于调用此 API 的代码RestTemplate
。为了收集Multipart
image
,我创建了一个简单的 bean 类,该类具有单个成员变量private MultipartFile image;
及其 getter 和 setter。
public class ImageClass implements Serializable{
private static final long serialVersionUID = 1L;
private MultipartFile image;
public MultipartFile getImage() {
return image;
}
public void setImage(MultipartFile image) {
this.image = image;
}
}
接下来我@modelAttribute
在下面的代码中使用了这个文件:
@PutMapping(value="api/update/image/{id}")
public String uploadFile(@PathVariable(name = "id")String id, @ModelAttribute ImageClass imageClass) {
MultipartFile file = imageClass.getImage();
RestTemplate restTemplate = new RestTemplate();
String url = "http://172.18.5.19:8082/api/upload/image/23";
String accessToken = getCrmAccessToken();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Bearer "+accessToken);
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> parts =
new LinkedMultiValueMap<String, Object>();
try {
parts.add("image", new ByteArrayResource(file.getBytes()));
} catch (IOException e) {
e.printStackTrace();
}
HttpEntity<MultiValueMap<String, Object>> requestEntity =
new HttpEntity<MultiValueMap<String, Object>>(parts, headers);
ResponseEntity<String> response =
restTemplate.exchange(url,
HttpMethod.PUT, requestEntity, String.class);
if (response != null && !response.getBody().trim().equals("")) {
return response.getBody();
}
return "error";
}
现在我在控制台上收到以下响应:
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 : "{"timestamp":1727438078594,"status":400,"error":"Bad Request","path":"/api/upload/image/23"}"
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:103) ~[spring-web-6.0.9.jar:6.0.9]
通过我的 API,应该调用这个实际的 API,因此我也尝试在 Postman 中将其作为 PUT 请求,如下所示
我是否为其提供了正确的标头。它需要持有者令牌(持有者令牌生成中没有问题),所有其他 API 都可以使用该持有者令牌生成代码正常工作。只有这个 API 导致问题。我应该怎么做才能解决这个问题
我甚至尝试用@RequestParam("image") final MultipartFile image
而不是@modelAttribute
。但得到的是相同的响应。
1 个回答