标题可能看起来很普通,但是没有一个适合我的问题.
我有一个REST服务,它接受多部分形式的常规参数和文件.
我想使用resttemplate将数据和文件发送到上述rest服务.
直到我发送正常的字符串数据为止,没有任何问题.一旦我添加了发送字节的代码,那么我开始收到400错误的请求错误.
如果我注释了发送ByteArrayResource的代码,那么它将开始为正常参数工作.
下面是示例代码
休息服务控制器
@RestController
@RequestMapping(value="/ticket")
public class UserTicketController {
@RequestMapping(value="/createTicket.do",method={RequestMethod.POST},
consumes = {MediaType.MULTIPART_FORM_DATA_VALUE},headers={"content-type="+MediaType.MULTIPART_FORM_DATA_VALUE})
public void createTicket(@ModelAttribute ServiceDeskRequest serviceDeskRequest, HttpServletRequest request,HttpServletResponse response) throws Exception{
}
}
Servicedeskrequest模型属性为
public class ServiceDeskRequest implements Serializable{
private String jsonData;
private MultipartFile attachment;
}
应用程序的context.xml
客户端代码
RestTemplate restTemplate = new RestTemplate();
MultiValueMap requestParamerterMap = new LinkedMultiValueMap();
requestParamerterMap.add("jsonData", jsonData);
MultipartFile attachment = userRequest.getAttachment();
if(attachment!=null && attachment.getOriginalFilename()!=null) {
ByteArrayResource byteArrayResource = new ByteArrayResource(attachment.getBytes(), attachment.getOriginalFilename());
requestParamerterMap.add("attachment", byteArrayResource);
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity> requestEntity = new HttpEntity>(requestParamerterMap, headers);
String response = restTemplate.postForObject(targetUrl, requestEntity, String.class);