На угловой стороне я передаю свой файл + объект json:
const formData: FormData = new FormData();
formData.append('fabricDTO', JSON.stringify(classToPlain(fabric)));
formData.append('file', picture);
return this.http.Post(this.SAVE_FABRIC_URL, formData)
А на стороне java я пытаюсь получить файл и объект json. У меня есть DTO с такой же структурой:
@RestController
@RequestMapping(value = "fabric")
public class FabricController {
@Autowired
IFabricService fabricService;
@PreAuthorize("#oauth2.hasScope('foo') and #oauth2.hasScope('read')")
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Collection<FabricDTO>> getUserFabrics() {
...
}
@PreAuthorize("#oauth2.hasScope('foo') and #oauth2.hasScope('read')")
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity saveUserFabrics(@RequestBody FabricDTO fabricDTO,
@RequestParam("file") MultipartFile file) {
...
}
}
В конфиге у меня есть multipartResolver
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
}
Это то, что я вижу в chrome console, в данных формы:
fabricDTO: {"fabricTypeId":4,"comment":"sdf"}
file: (binary)
FabricDTO - это:
private int id;
private float length;
private String comment;
private int fabricTypeId;
Но когда я посылаю вызов WS, я получаю сообщение об ошибке:
Решено [org.springframework.web.HttpMediaTypeNotSupportedException:
Тип содержимого
'Многочастному / форм-данных; граница = ---- WebKitFormBoundarymeuYlXb7Tsiyovtn; кодировка = UTF-8'
не поддерживается]
Я считаю, что не должен использовать @RequestBody для получения DTO, я пытался с @RequestParam, но все значения DTO равны нулю.
Должен ли я передавать свои данные другим способом?
Если я не добавлю DTO в formData и прокомментирую «@RequestBody FabricDTO fabricDTO» в контроллере, я смогу получить файл.
Thx