Les fichiers tels que les images et les données converties JSON sont POSTés en même temps en utilisant ʻaxios`, et le mappage et la validation des objets sont effectués du côté Spring. De la même manière, vous devriez pouvoir envoyer toutes les données qui peuvent être analysées du côté Spring en même temps.
Les points finaux sont:
L'astuce consiste à utiliser @ RequestPart
.
Il prend des valeurs entières, des fichiers et des objets JSON et les génère pour chacun.
point final
@PostMapping("/api/sample")
public void sample(
@RequestParam("intValue") Integer intValue,
@RequestPart("file") MultipartFile multipartFile,
@RequestPart("jsonValue") @Valid SampleObject sampleObject,
BindingResult bindingResult
) {
if(bindingResult.hasErrors()) {
//La gestion des erreurs
System.out.println(bindingResult.getAllErrors());
}
System.out.println(intValue);
System.out.println(multipartFile.getOriginalFilename());
System.out.println(sampleObject.getName());
}
Les objets à recevoir sont les suivants.
objet
@Getter @Setter
public class SampleObject {
@NotBlank
private String name;
@NotNull
private String description;
}
Le code pour POST est le suivant [^ indent]. La clé est de spécifier "type:" application / json "dans" new Blob ". Voir les commentaires pour savoir quoi envoyer.
POST
postSample (file) { //Faire passer le fichier en argument
const sampleObject = { //L'objet doit être JSON
name: 'name',
description: null //Accrocher la validation en définissant la description sur null
}
const formData = new FormData()
formData.append('file', file)
formData.append('jsonValue', new Blob([JSON.stringify(sampleObject)], {type : 'application/json'}))
formData.append('intValue', '1') //spécifiez 1 pour intValue
axios.post('/api/sample', formData)
}
J'ai envoyé un fichier appelé 1.png. Vous pouvez voir qu'il peut être traité correctement, y compris les erreurs.
[Field error in object 'jsonValue' on field 'description': rejected value [null]; codes [NotNull.jsonValue.description,NotNull.description,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [jsonValue.description,description]; arguments []; default message [description]]; default message [must not be null]]
1
1.png
name
Si vous ne spécifiez pas type: 'application / json
, vous vous fâcherez contre ʻorg.springframework.web.HttpMediaTypeNotSupportedException: Type de contenu'application / octet-stream' non prise en charge de la partie de requête. ʻApplication / octat-stream
signifie que la méthode de transmission n'est pas spécifiée, et si vous spécifiez JSON ici, cela fonctionnera correctement.
[^ indent]: style 2 espaces indent sans point-virgule.
Recommended Posts