как мы можем принять тело запроса с несколькими частями? - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь сделать почтовый запрос с телом запроса и четырьмя составными файлами.

Я поделился API

@PostMapping(value = "/deductee-master", consumes = MediaType.ALL_VALUE)
public ResponseEntity <DeducteeMaster> createDeductee(@RequestBody DeducteeMasterDTO deducteeMasterDTO, @RequestParam("trcFile") MultipartFile trcFile, @RequestParam("tenFFile") MultipartFile tenFFile, @RequestParam("wpeFile") MultipartFile wpeFile, @RequestParam("noPEFile") MultipartFile noPEFile)
throws InvalidKeyException, URISyntaxException, StorageException, IOException {
    DeducteeMaster result = deducteeMasterService.save(deducteeMasterDTO, trcFile, tenFFile, wpeFile, noPEFile);
    return ResponseEntity.created(new URI("/api/deductee-master/" + result.getKey().getId()))
        .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getKey().getId().toString()))
        .body(result);
}
{
    "timestamp": "2019-06-24T11:04:40.076+0000",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'multipart/form-data;boundary=--------------------------603218794646006873131102;charset=UTF-8' not supported",
    "path": "/api/deductee-master"
}

1 Ответ

0 голосов
/ 24 июня 2019

Используйте @RequestPart, а также, поскольку вы пытаетесь отправить и RequestBody, и Files, вы должны добавить его в FormData для отправки данных.

@RequestMapping(value = "/foo", method = RequestMethod.POST, consumes = "multipart/form-data")
public ResponseEntity<DeducteeMaster> createDeductee(@RequestPart("data") DeducteeMasterDTO deducteeMasterDTO,
            @RequestPart("trcFile") MultipartFile trcFile,
            @RequestPart("tenFFile") MultipartFile tenFFile,
            @RequestPart("wpeFile") MultipartFile wpeFile,
            @RequestPart("noPEFile") MultipartFile noPEFile)
            throws InvalidKeyException, URISyntaxException, StorageException, IOException {

     //LOGIC
     return // ...;

    }

Если вы хотите проверить с помощью CurL

curl -i -H "Content-Type:multipart/form-data" 
             -F "data =@test.json;type=application/json" 
             -F "trcFile =@test.csv;type=application/csv"
             -F "tenFFile =@test1.csv;type=application/csv"
             -F "wpeFile =@test2.csv;type=application/csv"
             -F "noPEFile =@test3.csv;type=application/csv"
             http://localhost:8080/foo

Если вы отправляете запрос по почте через Angular, React или любой другой язык javascript, попробуйте использовать FormData. Добавьте данные в formData

...