Actualmente estoy usando la API de recuperación para publicar un objeto JSON en una API REST creada con Spring Boot. Estoy usando formData para leer los datos del formulario y almacenarlos en un objeto JSON:
const data = new FormData(form); const formJson = Object.fromEntries(data.entries()); let responsePromise = await fetch( "http://localhost:8080/api/v1/student?id=" + studentId, { method: 'PUT', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(formJson) });El backend de Spring Boot espera un JSON que corresponda a la clase de entidad Student, que eventualmente se almacenará en mi base de datos:
@PutMapping public ResponseEntity<Student> updateStudent(@RequestBody Student student, @RequestParam Long id) { Student currentDatabaseEntry = studentService.getStudent(id); currentDatabaseEntry.setFirstName(student.getFirstName()); ... return new ResponseEntity<>(currentDatabaseEntry , HttpStatus.FOUND); }Esto funciona bien.
Ahora, he agregado una variable a la entidad Estudiante, que es de tipo byte[] y se supone que almacena una imagen del estudiante. Entonces, quiero agregar una entrada a mi objeto JSON con una image clave y el valor es un archivo de varias partes (el valor de un campo de entrada de tipo "archivo").
Por lo que he leído en Internet, parece que cada vez que quiero cargar un archivo, no debo cargar un JSON, sino el objeto formData. Sin embargo, no veo cómo manejar esta solicitud en mi backend: ¿Spring Boot no espera que el @RequestBody de la solicitud PUT sea un JSON que se asemeje a mi entidad Student?
De todos modos, ¿alguien sabe cómo lograr esto?