es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 objeto Car y el archivo en el mismo método. Tu método actualizado debería lucir así:

    @PutMapping("/{id}/actualizar")
    public void actualizarCarro(@PathVariable("id") Long carId, @Validated @ModelAttribute Car car, @RequestParam("file") MultipartFile file) throws ResourceNotFoundException, IOException {
        // puedes trabajar con el objeto car y el archivo en este método
    }
    

    Con este método actualizado, Spring vinculará el objeto JSON al atributo del modelo Car y el archivo al parámetro file. Luego podrás trabajar con el objeto Car y el archivo en el mismo método.

Comments are closed.