[Vraptor] Conversor

O ponto é: se existe um converter pra um tipo, eu tenho que usar esse converter.

se eu passo null para o converter, isso significa que o parâmetro não veio na requisição, daí o converter consegue tratar isso de acordo.

O IllegalStateException não é um problema, faz parte do algoritmo (meio estranho, mas blz). Ou seja, se existe um converter para Paciente e existem dois parâmetros para um paciente, eu tenho que converter e chamar os setters. Se existir um parâmetro só, só preciso converter.

A mudança que eu propus é a mais simples de implementar e a semântica é boa o suficiente:
se o cara não passou o parâmetro, vai null, se ele passou o parâmetro sem nada, vai vazio.

Se puder criar a issue, eu agradeço. Daí dá pra linkar a issue no Pull Request.

Ah, entendi. Realmente a IllegalStateException ficou bem estranho aí, já que cair lá não é um estado inválido. Poderia ter usado um if só: if(moreThanOneTarget)…

Mas já entendi. Só tem um outro problema: se eu passar só o seguinte parâmetro na requisição:

Nesse ele vai chamar erradamente o meu converter. O certo mesmo seria ele ver se o parâmetro que eu passei na requisição tem como destino a classe target mesmo ou se é uma property da classe target.

Inclusive eu vi aqui que estou tendo justamente esse problema: o meu converter só espera receber números (que representa o id dos meus models). Aí ele busca no banco o model correspondente e retorna. Mas se eu faço uma requisição como eu mostrei acima, ele tenta chamar meu converter passando a string “Teste”. Aí meu converter não entende e acaba retornando null.

PS: Vou criar a issue então.

Issue criada: https://github.com/caelum/vraptor/issues/594
Se quiser, dá uma conferida lá e vê se é isso mesmo.

É isso mesmo, valeu!

Po, não to conseguindo me entender com esse converter do Vraptor de jeito nenhum :confused:

Recapitulando: quando criei um conversor genérico para as minhas classes de modelo, algumas rotas pararam de funcionar. Isso porque eu estava fazendo apenas assim:

E quando eu criei um conversor pra superclasse de Paciente, isso parou de funcionar. Chegamos à conclusão que eu teria que fazer assim:

<input type="hidden" name="paciente" value="${paciente.id}"> <input type="text" name="paciente.nome" value="${paciente.nome}">
Dessa forma, o meu conversor criaria uma instância vazia de Paciente. O problema agora é quando o meu modelo tem uma lista de modelos. Por exemplo: um paciente com uma lista de Convenios (que também é uma classe de modelo). Na documentação do Vraptor diz o seguinte:

[quote]Se um atributo do objeto ou parâmetro do método for uma lista (List<> ou array), você pode passar vários parâmetros usando colchetes e índices:
cliente.telefones[0]=(11) 5571-2751 #no caso de ser uma lista de String
cliente.dependentes[0].id=1 #no caso de ser qualquer objeto, você pode continuar a navegação
cliente.dependentes[3].id=1 #os índices não precisam ser sequenciais
cliente.dependentes[0].nome=Cicrano #se usar o mesmo índice, vai ser setado no mesmo objeto
clientes[1].id=23 #funciona se você receber uma lista de clientes no método[/quote]
Mas isso não funciona com o conversor que eu criei. Estou fazendo assim:

<input type="hidden" name="paciente" value="${paciente.id}"> <input type="text" name="paciente.nome" value="${paciente.nome}"> <input type="text" name="paciente.convenios[0]" value="2"> <input type="text" name="paciente.convenios[1]" value="9">
Nesse caso estou recebendo a seguinte exception:

br.com.caelum.vraptor.http.InvalidParameterException: Exception when trying to instantiate Target(name=medico, type=class br.com.metamorfosevirtual.models.Medico) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.handleException(VRaptorInstantiator.java:96) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:88) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:81) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateOrAddError(IogiParametersProvider.java:80) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateParameters(IogiParametersProvider.java:73) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.getParametersFor(IogiParametersProvider.java:63) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:132) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.metamorfosevirtual.interceptors.DaoInterceptor.intercept(DaoInterceptor.java:36) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:138) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.metamorfosevirtual.interceptors.HibernateInterceptor.intercept(HibernateInterceptor.java:27) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:93) at br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: br.com.caelum.vraptor.VRaptorException: Unable to find converter for java.util.List at br.com.caelum.vraptor.core.DefaultConverters.to(DefaultConverters.java:59) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.converterForTarget(VRaptorInstantiator.java:159) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.instantiate(VRaptorInstantiator.java:131) at br.com.caelum.iogi.reflection.NewObject.setProperty(NewObject.java:57) at br.com.caelum.iogi.reflection.NewObject.populateProperties(NewObject.java:51) at br.com.caelum.iogi.reflection.NewObject.valueWithPropertiesSet(NewObject.java:41) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.setPropertiesAfterConversions(VRaptorInstantiator.java:146) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.instantiate(VRaptorInstantiator.java:135) at br.com.caelum.iogi.MultiInstantiator.instantiate(MultiInstantiator.java:20) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:86) ... 51 more
O que é mais estranho é que se eu colocar essa lista como parâmetro direto do método, funciona. Assim:

<input type="hidden" name="paciente" value="${paciente.id}"> <input type="text" name="paciente.nome" value="${paciente.nome}"> <input type="text" name="convenios[0]" value="2"> <input type="text" name="convenios[1]" value="9">
Mas o problema dessa forma é que eu teria que ficar “montando” o paciente na mão e o método ficaria cheio de parâmetros. Tem alguma forma de resolver isso?

se vc só quer fazer o relacionamento do convenio com o paciente, vc não precisaria do converter. Só setar o id já seria o suficiente:

<input type="text" name="paciente.convenios[0].id" value="2">  
<input type="text" name="paciente.convenios[1].id" value="9"> 

em todo caso, verifica se vc tá dando um new ArrayList() ou coisa do tipo pra inicializar a lista de convênios. Se tiver, tenta retirar isso, o IOGI (que o VRaptor usa pra popular os objetos) não gosta muito disso.

Não é só pro relacionamento não. Preciso do “Convenio” inteiro, pois preciso validar algumas regras de negócio.

Eu tava inicializando a lista sim (dentro da classe de modelo), mas já removi e continuou dando o mesmo erro.

habilita o log de debug do VRaptor e veja o que acontece durante a requisição

troca o INFO do vraptor pra DEBUG

Cara, me pareceu estar tudo certinho… Mas acho que você saberia dizer melhor:

Logo depois disso, vem a exceção.

convenios é uma lista de Medico?

Não… É uma lista de planos de saúde.

o erro que vc mandou é:

br.com.caelum.vraptor.http.InvalidParameterException: Exception when trying to instantiate Target(name=medico, type=class br.com.metamorfosevirtual.models.Medico) 

ou seja, não é dessa requisição…

posta o erro que acontece nessa requisição, por favor.

É que eu tenho 2 trechos do código na mesma situação: um paciente com uma lista de convênios e um médico com uma lista de especialidades. O erro é o mesmo. Aqui na thread eu usei o paciente como exemplo, mas mandei a stack errada mesmo. Segue a stack de quando eu crio o paciente (com o debug do Vraptor):

11:06:53,404 DEBUG [DefaultResourceTranslator] trying to access /novo-paciente 11:06:53,408 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: PacienteController.cadastrar(Paciente, String)] 11:06:53,408 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor HibernateInterceptor 11:06:53,409 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor 11:06:53,410 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor 11:06:53,413 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor 11:06:53,413 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor DaoInterceptor 11:06:53,417 DEBUG [DefaultResult ] including attribute conveniosList: [Amil, Bradesco Saúde, Dix, Golden Cross, Unimed] 11:06:53,417 DEBUG [DefaultResult ] including attribute convenios: {Amil=false, Bradesco Saúde=false, Dix=false, Golden Cross=false, Unimed=false} 11:06:53,418 DEBUG [IogiParametersProvider] IogiParametersProvider is up 11:06:53,418 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor 11:06:53,419 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for PacienteController.cadastrar(Paciente, String) as [paciente, confirmarSenha] 11:06:53,419 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for PacienteController.cadastrar(Paciente, String) as [paciente, confirmarSenha] 11:06:53,420 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters(Parameter(paciente.senha -> felipe), Parameter(paciente.email -> felipe@gmail.com), Parameter(paciente.sexo -> Masculino), Parameter(paciente.convenios[0] -> 3), Parameter(paciente -> ), Parameter(paciente.convenios[1] -> 5), Parameter(paciente.telefone -> (12) 3456-7890), Parameter(paciente.nome -> Felipe), Parameter(paciente.cpf -> 012.345.678-90), Parameter(paciente.celular -> (12) 34567-9005), Parameter(confirmarSenha -> felipe)) and targets [Target(name=paciente, type=class br.com.metamorfosevirtual.models.Paciente), Target(name=confirmarSenha, type=class java.lang.String)]. Jan 30, 2014 11:06:53 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [default] in context with path [/marque-agora] threw exception br.com.caelum.vraptor.http.InvalidParameterException: Exception when trying to instantiate Target(name=paciente, type=class br.com.metamorfosevirtual.models.Paciente) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.handleException(VRaptorInstantiator.java:96) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:88) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:81) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateOrAddError(IogiParametersProvider.java:80) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.instantiateParameters(IogiParametersProvider.java:73) at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.getParametersFor(IogiParametersProvider.java:63) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:132) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:86) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.metamorfosevirtual.interceptors.DaoInterceptor.intercept(DaoInterceptor.java:36) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.metamorfosevirtual.interceptors.HibernateInterceptor.intercept(HibernateInterceptor.java:30) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:93) at br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: br.com.caelum.vraptor.VRaptorException: Unable to find converter for java.util.List at br.com.caelum.vraptor.core.DefaultConverters.to(DefaultConverters.java:59) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.converterForTarget(VRaptorInstantiator.java:159) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.setPropertiesAfterConversions(VRaptorInstantiator.java:144) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.instantiate(VRaptorInstantiator.java:135) at br.com.caelum.iogi.reflection.NewObject.setProperty(NewObject.java:57) at br.com.caelum.iogi.reflection.NewObject.populateProperties(NewObject.java:51) at br.com.caelum.iogi.reflection.NewObject.valueWithPropertiesSet(NewObject.java:41) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.setPropertiesAfterConversions(VRaptorInstantiator.java:146) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator$VRaptorTypeConverter.instantiate(VRaptorInstantiator.java:135) at br.com.caelum.iogi.MultiInstantiator.instantiate(MultiInstantiator.java:20) at br.com.caelum.vraptor.http.iogi.VRaptorInstantiator.instantiate(VRaptorInstantiator.java:86) ... 50 more

br.com.caelum.vraptor.VRaptorException: Unable to find converter for java.util.List

O IOGI está achando que paciente.convenios[0] é uma List, ao invés de um plano de saúde.

Abre uma issue no VRaptor por favor?

Por enquanto, uma solução seria receber a lista separada do paciente mesmo, e depois fazer o setConvenios manualmente.

Criada: https://github.com/caelum/vraptor/issues/596

Em quanto tempo mais ou menos você estima que estaria disponível numa versão final?

A gente achou alguns outros bugs como esse no IOGI, então a gente provavelmente vai gerar uma versão do IOGI e outra do VRaptor 3 após fazer isso.

Não sei quanto tempo isso demoraria, mas se você estiver a fim, pode tentar corrigir e mandar um Pull Request =)
Se optar por isso posso te dar todo o suporte necessário e você com certeza vai aprender bastante sobre o VRaptor e sobre reflection em java.

Agora, agora estou um pouco sem tempo, terminando vários projetos. Mas assim que terminar, vou dar uma olhada sim. Vou tentar corrigir as 2 issues que criei nessa thread. Aí provavelmente vou precisar da sua ajuda sim :slight_smile:

Cara, eu acho que encontrei outro bug no Vraptor. To achando um pouco bizarro. Eu fiz o que você falou: to recebendo uma lista separada de Convenios. Aí não funcionou. Só que eu achei estranho, porque com Especialidades tinha funcionado. Revi o código e não achei nenhum problema. Quando eu renomeei o nome da variável que eu recebo pra “convs” ao invés de “convenios”, aí funcionou. Faz sentido o nome da variável influenciar assim no comportamento?

PS: o erro que deu foi “IllegalArgumentException: argument type mismatch”

só faz sentido se existir algum tipo de cache no browser ou no código…
talvez foi falta de um clean no código e no servidor.

Dei clean no projeto, no servidor e limpei o cache do browser e o problema continuou. Mas eu acho que entendi o que tá acontecendo. Eu tenho um interceptor que faz o seguinte:

Ou seja ele dá um include de convênios pra todas as rotas. Mas o que é estranho de dar conflito é que result.include adiciona um uma variável ao “request”? Ele podia tratar o caso de já existir uma variável com o mesmo nome, mas tipo diferente…