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.

El atributo de modelo Java Multipart Form Data Input no está inyectando los elementos en la clase de solicitud – Spring Boot.

Estoy intentando cargar un archivo junto con algunos campos de un formulario. He creado un controlador POST en Spring Boot. Tengo un @ModelAttribute como una clase de entrada, y al hacer un registro de la aplicación, es visible que se está obteniendo el flujo de bytes a nivel de aplicación. El problema aquí es que el @ModelAttribute no está estableciendo esos valores en la clase Java Pojo. Está obteniendo null. A continuación se muestra mi método de controlador, la clase de carga de solicitud y los registros.

¿Qué estoy haciendo mal aquí?

@PostMapping(value = "/registration/file", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseStatus(code = HttpStatus.OK)
public BaseResponse fileTest(@ModelAttribute("data") FileUpload fileUpload) {
    log.info("..........getEmail:{}", fileUpload.getEmail());
    log.info("..........getCrDoc:{}", fileUpload.getCrDoc());
    return new BaseResponse();
}

@Data
public class FileUpload {
    private String email;

    private MultipartFile crDoc;
}

— LOG’s

HttpLoggingFilter:96 | Request - [PATH INFO:/pvt/registration/file] [REQUEST PARAMETERS:{}] [REQUEST BODY:------WebKitFormBoundaryDn9gdoWJ3qb48OObContent-Disposition: form-data; name="email";hello@abc.com------WebKitFormBoundaryDn9gdoWJ3qb48OObContent-Disposition: form-data; name="crDoc"; filename="sample.png"Content-Type: image/png�PNGIHDR
PrivateUserRegistrationController:61 | ..........getEmail:null
PrivateUserRegistrationController:62 | ..........getCrDoc:null

Imagen de muestra

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el código y los registros proporcionados, parece que el problema está en la forma en que se maneja la carga de archivos en la clase FileUpload. La propiedad MultipartFile debe mapearse correctamente con la dependencia spring-web y estar anotada con @RequestParam en el método del controlador.

    Aquí hay una versión actualizada de la clase FileUpload:

    @Data
    public class FileUpload {
        private String email;
    
        @RequestParam("crDoc")
        private MultipartFile crDoc;
    }
    

    Y el método de controlador correspondiente:

    @PostMapping(value = "/registration/file", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseStatus(code = HttpStatus.OK)
    public BaseResponse fileTest(@ModelAttribute("data") FileUpload fileUpload) {
        log.info("..........getEmail:{}", fileUpload.getEmail());
        log.info("..........getCrDoc:{}-{}", fileUpload.getCrDoc().getName(), fileUpload.getCrDoc().getOriginalFilename());
        return new BaseResponse();
    }
    

    Ten en cuenta que la anotación @RequestParam("crDoc") en la propiedad crDoc mapea el archivo cargado en esa propiedad. Los registros ahora deberían mostrar correctamente el correo electrónico y los detalles del archivo.

Comments are closed.