Title might look common but none of them fit in my issue.
I have a rest service which accept normal parameters and file in form of multipart.
i want to use resttemplate to send data and file to above rest service.
till the time i was sending normal string data there was no issue. once i add code of sending bytes then i start getting 400 Bad request error.
if i comment code to send ByteArrayResource then it start working for normal parameters.
below is sample code
Rest service controller
@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 model attribute is
public class ServiceDeskRequest implements Serializable{ private String jsonData; private MultipartFile attachment; } application-context.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean> Client Side code
RestTemplate restTemplate = new RestTemplate(); MultiValueMap<String, Object> requestParamerterMap = new LinkedMultiValueMap<String, Object>(); 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<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(requestParamerterMap, headers); String response = restTemplate.postForObject(targetUrl, requestEntity, String.class);