Я создаю POC для RESTFUL Web-сервиса, используя Spring 4.0. Он работает нормально, если мы передаем только String или любой другой базовый dataype.
@RequestMapping(value="/upload/file", method=RequestMapping.post)
public String uploadFile(@RequestParam("fileName", required=false) String fileName){
logger.info("initialization of object");
//----------------------------------------
System.out.Println("name of File : " + fileName);
//----------------------------------------
}
Это прекрасно работает. но если я хочу передать поток байтов или объект File для работы, как я могу написать эту функцию, имеющую эти параметры? и как я могу написать Client, обеспечивающий передачу байтового потока?
@RequestMapping(value="/upload/file", method=RequestMapping.post)
public String uploadFile(@RequestParam("file", required=false) byte [] fileName){
//---------------------
//
}
Я пробовал этот код, но получаю ошибку 415.
@RequestMapping(value = "/upload/file", method = RequestMethod.POST, consumes="multipart/form-data")
public @ResponseBody String uploadFileContentFromBytes(@RequestBody MultipartFormDataInput input, Model model) {
logger.info("Get Content. ");
//------------
}
Код клиента - использование apache HttpClient
private static void executeClient() {
HttpClient client = new DefaultHttpClient();
HttpPost postReqeust = new HttpPost(SERVER_URI + "/file");
try{
// Set Various Attributes
MultipartEntity multipartEntity = new MultipartEntity();
multipartEntity.addPart("fileType" , new StringBody("DOCX"));
FileBody fileBody = new FileBody(new File("D:\\demo.docx"), "application/octect-stream");
// prepare payload
multipartEntity.addPart("attachment", fileBody);
//Set to request body
postReqeust.setEntity(multipartEntity);
HttpResponse response = client.execute(postReqeust) ;
//Verify response if any
if (response != null)
{
System.out.println(response.getStatusLine().getStatusCode());
}
}
catch(Exception ex){
ex.printStackTrace();
}