Boa noite galera.
Estou tentando realizar um upload de uma foto que tirei com o componente de Camera do Ionic, realizando uma chamada PUT para um RestController no Spring Boot. Essa requisição, contém outros campos além da foto. (Tela de atualização de dados).
Quando tento fazer o upload, está dando erro:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.web.multipart.MultipartFile` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information at [Source: (PushbackInputStream); line: 149, column: 16] (through reference chain: br.com.ex.Account["imageFile"])
Segue código do Ionic e Spring Boot:
takePicture() {
Picture.takePhoto()
.then(imageFileUri => {
this.handleImageFile(imageFileUri);
}).catch(
error => console.log(JSON.stringify(error))
);
}
private handleImageFile(imageFileUri) {
this.file.resolveLocalFilesystemUrl(imageFileUri)
.then(entry => (<FileEntry>entry).file(file => this.readFile(file)))
.catch(err => console.log(err));
}
private readFile(file: any) {
const reader = new FileReader();
reader.onloadend = () => {
const formData = new FormData();
const imageBlob = new Blob([reader.result], {type: file.type});
formData.append('file', imageBlob, file.name);
this.myAccount.imageFile = formData;
};
reader.readAsArrayBuffer(file);
}
Aqui faço a chamada ao serviço Rest:
updateAccount(account : Account) : Observable<Response> {
let url = Endpoint + '/update';
//Aqui seto uns valores
this.createBodyForUpdate(account);
return this.http.put(url, account, Utils.getOptionsToRequest());
}
Serviço Rest:
@PutMapping(value = "/update")
public ResponseEntity<String> update(@RequestBody final Account account) {}
É nessa chamada que estoura o erro mencionado acima.
O campo da foto está na propriedade: private MultipartFile imageFile; da classe Account
Todos os demais campos são setados normalmente e funciona corretamente quando não tento passar a foto. Alguém tem ideia do que pode estar acontecendo?