Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Passo de mágica?

Prezados, boa noite.

Estou tendo dificuldade de entender as configurações necessárias para que um determinado recurso funcione no SpringMVC. Eu me vejo completamente perdido, tendo que engolir determinadas configurações, pra mim, sem nexo. Imaginem, por um minuto, que eu esteja usando um recurso qualquer em minha página web (exemplo do multipart) e tome o seguinte erro: NullPointerException. E como se fosse vidente, eu descubra a necessidade de implementar um método, como por exemplo, customizeRegistration, em meu Servlet, que irá resolver meu problema. Pelo amor de Deus, vocês podem me explicar alguma coisa que faça sentido nessa configuração? Como, olhando pro erro, vou interpretar a necessidade de implementar algum método, seja na Servlet ou na classe de configuração? Fica a sensação que se eu estivesse sozinho teria que recorrer ao google para resolver um erro como este.

3 respostas

Boa noite, Dirley!

Infelizmente, quando lidamos com outras ferramentas/bibliotecas, nem tudo vai fazer sentido ou vai ser super claro pra gente. Algumas coisas vamos ter que simplesmente aceitar que é assim que a ferramenta quis que fosse.

Sem a ajuda de um curso ou um post ou um video-tutorial ensinando, temos que olhar na documentação da ferramenta ou procurar no google mesmo para ver como fazer pra configurar tal pedaço da ferramenta.

No exemplo que você deu, realmente não ficou muito claro separar a configuração assim no meio.O que aconteceu foi que foi configurado parte do MultipartResolver, testado e continuou dando erro (o erro NullPointerException é bem genérico, mas vendo a linha em que ele ocorreu, dá pra ver que é porque a variável sumario, do tipo MultipartFile, tá nula). Como o MultipartFile não foi gerado, uma das possibilidades é o MultipartResolver ainda não estar fazendo o seu papel corretamente e precisar se melhor configurado.Mas, pra saber que precisava configurar o MultipartResolver, dava pra ser na base da tentativa e erro, como o instrutor fez: ele primeiro tentou ter um MultipartFile, mas o Spring devolveu um erro perguntando se o MultipartResolver estava configurado.

No dia a dia, olhando a documentação da ferramenta sobre aquela necessidade específica, achamos as configurações, às vezes espalhadas pela documentação. Em posts sobre o assunto, muitas vezes já tem toda a configuração que precisa ser feita de uma vez.

Nesse caso, por exemplo, eu procuraria por "como configurar um MultipartResolver no Spring MVC" e acharia a documentação da interface MultipartResolver.No início da documentação ele fala que é preciso definir uma implementação, criando um bean com o id multipartResolver em algum local que seja um contexto de DispatcherServlet na aplicação. Isso foi feito na primeira parte da configuração no curso, ao escrevermos o código:


    @Bean
    public MultipartResolver multipartResolver(){
        return new StandardServletMultipartResolver();
    }

Ps: para saber como criar um bean com um nome (id) específico, teria que procurar na documentação do Spring específica sobre criar beans.

Para definir uma implementação para a interface MultipartResolver, a sua documentação sugere duas: CommonsMultipartResolver e StandardServletMultipartResolver, com link para cada uma. Aí, clicando no link da implementação escolhida, tem outras configurações que podem ter que serem feitas ou não. Olhando a documentação da classe StandardServletMultipartResolver, a implementação escolhida no curso, dá pra ver no box que precisa implementar esse método customizeRegistration(), que recebe um parâmetro do tipo Dynamic. A documentação não explica porque sempre tem que ter esse método. Só diz que precisa criar pra poder usar essa implementação do MultipartResolver.

No fim das contas é isso. Precisamos adaptar nosso código ao que a documentação pedir. Às vezes ela é boa e explica bem e tudo em um lugar só (tem vezes que fala também o motivo de precisar de cada configuração!), às vezes ela explica tudo, mas em locais separados e temos que ficar procurando na documentação, às vezes a documentação é ruim mesmo e temos que procurar por posts ou videos tutoriais.

solução!

Sua resposta foi perfeita. Por um instante me achei incapaz de aprender java. Obrigado.

Fico feliz em ajudar. :)

As ferramentas ajudam a gente facilitando algumas partes estruturais chatas e bem trabalhosas, mas em troca a gente tem que entender que métodos e classes chamar ou criar pra elas funcionarem como a gente quer, e geralmente cada ferramenta define como ela própria funciona. É o famoso trade-off.