Environment:
Spring Boot / Spring Boot Starter Batch Version 1.5.6.RELEASE
Oracle Java 8
1. multipart/form-data POST request with request parameter metadata
curl:
curl -k -H 'Content-Type: multipart/form-data' -F 'docFiles=@test1.txt;type=text/plain' 'https://localhost:8443/cherryshoe-app/document/file/upload/REVIEW?id=3554&docTypeId=1'
-k is to to turn off curl's verification of the self-signed certificate
-F Contents to be read from file use the @
Matching Java Controller Method Signature:
@RequestMapping(value = "/document/
file/upload", consumes = "multipart/form-data", produces = "application/json;charset=utf-8", method = RequestMethod.POST)
@ResponseBody
public DocumentUploadMetadata fileUpload(
@RequestParam(value = "id", required = true) final Long reviewId,
@RequestParam(value = "docTypeId", required = true) final Long docTypeId,
@RequestParam("docFiles") List<MultipartFile> docFiles, Principal principal)
throws IllegalArgumentException, NullPointerException, Exception {
}
2. multipart/form-data POST request with JSON request body metadata
curl:
curl -k -H 'Content-Type: multipart/form-data' -F 'docFiles=@test1.txt;type=text/plain' -F metadata='{"reviewId":3554,"docTypeId":1,"customFileName":"customFileName.txt","commentText":"This is a really long text, it may even be in HTML"};type=application/json' 'https://localhost:8443/cherryshoe-app/document/file/upload'
-k is to to turn off curl's verification of the self-signed certificate
-F Contents to be read from file use the @
Matching Java Controller Method Signature:
@RequestMapping(value = "/document/file/upload", consumes = "multipart/form-data", produces = "application/json;charset=utf-8", method = RequestMethod.POST)
@ResponseBody
public DocumentUploadMetadata fileUpload(@RequestPart("docFiles") List<MultipartFile> docFiles,
@RequestPart("metadata") DocumentUploadMetadata metadata, Principal principal)
throws IllegalArgumentException, NullPointerException, Exception {
}
This Signature also works, had to do this to work with ng-file-upload library:
/**
* Takes a list of document MultipartFile's, and JSON metadata.
*
* NOTE: To make this work with ng-file-upload: - have to pass the JSON
* metadata as a String, and then deserialize the JSON String manually in
* the controller.
*
* @param docFiles
* @param metadata
* @param principal
* @return
* @throws IllegalArgumentException
* @throws NullPointerException
* @throws Exception
*/
@RequestMapping(value = "/document/file/upload", consumes = "multipart/form-data", produces = "application/json;charset=utf-8", method = RequestMethod.POST)
@ResponseBody
public DocumentUploadMetadata fileUpload(@RequestParam("docFiles") List<MultipartFile> docFiles,
@RequestParam("metadata") String metadataJson, Principal principal)
throws IllegalArgumentException, NullPointerException, Exception {
// deserialize metadataJson JSON string manually
}
POJO for JSON metadata serialization/deserialization:
public class DocumentUploadMetadata {
private Long reviewId;
private Long docTypeId;
private String customFileName;
private String commentText;
public DocumentUploadMetadata() {
super();
}
// getters and setters are needed for jackson serialization/deserialization, add them for this to work
}
Helpful curl documentation: https://curl.haxx.se/docs/manual.html
No comments:
Post a Comment
I appreciate your time in leaving a comment!