2
respostas

Nao consigo receber um arquivo dentro de um DTO passado do angular para o Java atraves de um http Post

controller :

@PostMapping(value = "/enviarArquivo")
    public HttpEntity envio(@RequestBody EnvioArquivoDTO dto){}

Classe:

 @Getter @Setter
public class EnvioArquivoDTO {

    private Usuario usuario;

    private MockMultipartFile file;
}

no angular é enviado um DTO com o usuario e um file do tipo FormData. Se eu tento usar o MultipartFile nao consigo pois ele é uma interface e com o Mock dá esse log:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.mock.web.MockMultipartFile` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
2 respostas

Fala Bruno, tudo bem?

O intuito do MockMultipartFile é criar um mock de um arquivo para rodar dentro de um @Test.

Você criou o arquivo utilizando algo similar ao código abaixo?

MockMultipartFile file = new MockMultipartFile(
                    "file",
                    filename,
                    "application/sql",
                    new FileInputStream(testScriptPath));

Poste o código completo, por favor.

Abraço!

Ah, obrigado, não sabia que o mock era apenas para teste. Meu intuito é enviar um DTO com o multipartfile dentro desse DTO, dessa forma :

public class dto{ private MultipartFile file;

private Usuario usuario;

} Porém, quando eu envio a requisição, ocorre uma exception pois o MultipartFile nao pode ser instanciado. Porém, se eu recebe-lo como objeto unico da requisição, ele funciona.

assim funciona: public HttpEntity envio( @RequestParam("file") MultipartFile file, @RequestParam ("usuario") String matricula ) throws IOException {}

assim nao funciona: public HttpEntity envio(@RequestBody EnvioArquivoDTO dto){}