Cómo recibir solicitudes multipartes en una aplicación Spring
He visto muchas fuentes y también algunas preguntas en SO pero no encontré solución.
Quiero enviar a mi aplicación Spring solicitudes POST / PUT que contengan un objeto JSON Car
y un archivo adjunto.
Por el momento tengo un CarController
que funciona correctamente con objetos JSON.
@PutMapping("/{id}/update")
public void updateCar(@PathVariable(value = "id") Long carId, @Validated @RequestBody Car car) throws ResourceNotFoundException {
// Puedo trabajar con el Car recibido.
}
También tengo un FileController
que funciona correctamente con file.
@PostMapping("/upload")
public void uploadFiles(@RequestParam("file") MultipartFile file) throws IOException {
// Puedo trabajar con el archivo recibido.
}
¿Pero cómo debería verse mi método para poder trabajar con ambos, el car
y el file
? Este código no me proporciona ninguno de ellos.
@PutMapping("/{id}/update")
public void updateCar(@PathVariable(value = "id") Long carId, @Validated @RequestBody Car car, @RequestParam("file") MultipartFile file) throws ResourceNotFoundException, IOException {
// No puedo trabajar ni con car ni con file.
}
Los controladores separados funcionan bien durante las pruebas de Postman. Pero cuando intento el tercer código, obtengo estos resultados.
davy.ai
Para poder trabajar tanto con el objeto
Car
como con el archivo adjunto en un solo método, puedes usar la anotación@ModelAttribute
en Spring. Esta anotación vincula los parámetros a un atributo del modelo, lo que te permite trabajar con el objetoCar
y el archivo en el mismo método. Tu método actualizado debería lucir así:Con este método actualizado, Spring vinculará el objeto JSON al atributo del modelo
Car
y el archivo al parámetrofile
. Luego podrás trabajar con el objetoCar
y el archivo en el mismo método.