[JAVA] [Spring Boot] Poste Dateien und andere Daten gleichzeitig [Axios]

Dinge die zu tun sind

Dateien wie Bilder und JSON-konvertierte Daten werden gleichzeitig mit "axios" POST-fähig gemacht, und die Zuordnung und Validierung zu Objekten erfolgt auf der Spring-Seite. Auf die gleiche Weise sollten Sie in der Lage sein, alle Daten zu senden, die gleichzeitig auf der Spring-Seite analysiert werden können.

Lauf

Java-Seite

Die Endpunkte sind: Der Trick besteht darin, "@ RequestPart" zu verwenden. Es werden ganzzahlige Werte, Dateien und JSON-Objekte verwendet und für jedes ausgegeben.

Endpunkt


@PostMapping("/api/sample")
public void sample(
        @RequestParam("intValue") Integer intValue,
        @RequestPart("file") MultipartFile multipartFile,
        @RequestPart("jsonValue") @Valid SampleObject sampleObject,
        BindingResult bindingResult
) {
    if(bindingResult.hasErrors()) {
        //Fehlerbehandlung
        System.out.println(bindingResult.getAllErrors());
    }

    System.out.println(intValue);
    System.out.println(multipartFile.getOriginalFilename());
    System.out.println(sampleObject.getName());
}

Die zu empfangenden Objekte sind wie folgt.

Objekt


@Getter @Setter
public class SampleObject {
    @NotBlank
    private String name;
    @NotNull
    private String description;
}

JS Seite

Der Code für POST lautet wie folgt [^ Einzug]. Der Schlüssel ist die Angabe von "type:" application / json "in" new Blob ". In den Kommentaren finden Sie Informationen zum Senden.

POST


postSample (file) { //Lassen Sie die Datei als Argument übergeben
  const sampleObject = { //Objekt, um JSON zu sein
    name: 'name',
    description: null //Haken Sie die Validierung ein, indem Sie die Beschreibung auf null setzen
  }

  const formData = new FormData()
  formData.append('file', file)
  formData.append('jsonValue', new Blob([JSON.stringify(sampleObject)], {type : 'application/json'}))
  formData.append('intValue', '1') //Geben Sie 1 für intValue an

  axios.post('/api/sample', formData)
}

Ausführungsergebnis

Ich habe eine Datei namens 1.png gesendet. Sie können sehen, dass es einschließlich Fehler ordnungsgemäß verarbeitet werden kann.

[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

Code, der fehlschlägt

Wenn Sie nicht "type:" application / json "angeben, werden Sie wütend auf" org.springframework.web.HttpMediaTypeNotSupportedException: Inhaltstyp "application / octet-stream" nicht unterstützter Anforderungsteil ". application / octat-stream bedeutet, dass die Übertragungsmethode nicht angegeben ist. Wenn Sie hier JSON angeben, funktioniert sie ordnungsgemäß.

[^ indent]: Semikolonloser Stil mit 2 Leerzeichen.

Recommended Posts

[Spring Boot] Poste Dateien und andere Daten gleichzeitig [Axios]
[Spring Boot] POST-Datei-Array / Liste und andere Daten gleichzeitig [Axios]
Spring Boot zum ersten Mal
Implementierungsmethode zum Verknüpfen mehrerer Bilder mit einem Beitrag und zum gleichzeitigen Posten
Zeichnen Sie mit MPAndroidChart gleichzeitig Balkendiagramm und Liniendiagramm
Verhalten beim gleichzeitigen Hinzufügen von RadioButton und Erstprüfung im Code festgestellt
Überprüfen Sie das Verhalten von getOne-, findById- und Abfragemethoden mit Spring Boot + Spring Data JPA
Bis zur Verwendung von Spring Data und JPA Part 2
Bis zur Verwendung von Spring Data und JPA Part 1
[Java] Fehler beim Methodenaufruf, wenn Vererbung und Schnittstellenimplementierung gleichzeitig ausgeführt werden
Verwendung derselben Mapper-Klasse in mehreren Datenquellen mit Spring Boot + MyBatis
So ändern Sie den Einstellungswert von application.properties beim Booten im Frühjahrsstart
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
[Spring Boot] Verschieben Sie die Validierung (@Validated / @Valid) jederzeit [BeanValidation]
[Spring Data JPA] Die benutzerdefinierte ID wird zum Zeitpunkt der Registrierung in einer eindeutigen Reihenfolge zugewiesen.
Starten Sie webpack-dev-server und docker-compose gleichzeitig auf dem Windows-Terminal und zeigen Sie sie in einem anderen Bereich an
Ungefähr der gleiche und der gleiche Wert
Überprüfen Sie das aktuelle Datum und die Uhrzeit beim Analysieren mit Javas SimpleDateFormat
Hochladen und Herunterladen von Dateien mit Ajax mit Spring Boot (ohne JQuery)
Sehen Sie sich das Verhalten von Entitätsaktualisierungen mit Spring Boot + Spring Data JPA an
Lock_version kann für Tabellen verwendet werden, die dazu neigen, gleichzeitig auf denselben Datensatz zuzugreifen und ihn zu bearbeiten