Vraptor 3 @Path LOWEST não funciona

11 respostas
R

E ai pessoal tudo bem?

Tenho vários controllers com e sem @Path ex

CadastroController{

public voir list(){}

}
}

O acesso seria cadastro/list

Cadastro2Controller{

public void list(){}

}

e cadastro2/list

e tenho um controller com @Path dinâmico

Cadastro3Controller {
@Path(priority=Path.LOWEST, value="/{valor}/{valor2}")
public void alterar(String valor, String valor2){}
}

dai vem o erro

java.lang.IllegalStateException: There are two rules that matches the uri

e se eu colocar

@Path(priority=Path.LOW, value="/{valor}/{valor2}")

o método sempre é acessado primeiro...

o que será isso?

Abraços...

11 Respostas

Lucas_Cavalcanti

qual versão do vraptor?

R

Versão 3.3.2

Lucas_Cavalcanti

quais são essas duas rules que ele está acusando?

Lucas_Cavalcanti
hum  uma olhada:

<aside class="onebox githubblob">
  <header class="source">
      <a href="https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/http/route/DefaultRouteBuilder.java#L92" target="_blank">github.com</a>
  </header>
  <article class="onebox-body">
    <h4><a href="https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/http/route/DefaultRouteBuilder.java#L92" target="_blank">caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/http/route/DefaultRouteBuilder.java#L92</a></h4>
<pre class="onebox"><code class="lang-java"><ol class="start lines" start="82" style="counter-reset: li-counter 81 ;">
<li>public class DefaultRouteBuilder implements RouteBuilder {</li>
<li>	private final Set<HttpMethod> supportedMethods = EnumSet.noneOf(HttpMethod.class);</li>
<li>
</li>
<li>	private final Proxifier proxifier;</li>
<li>	private static final Logger logger = LoggerFactory.getLogger(DefaultRouteBuilder.class);</li>
<li>
</li>
<li>	private final String originalUri;</li>
<li>
</li>
<li>	private Route strategy = new NoStrategy();</li>
<li>
</li>
<li class="selected">	private int priority = Path.LOWEST;</li>
<li>
</li>
<li>	private final DefaultParameterControlBuilder builder;</li>
<li>
</li>
<li>	private final TypeFinder finder;</li>
<li>
</li>
<li>	private final Converters converters;</li>
<li>
</li>
<li>	private final ParameterNameProvider nameProvider;</li>
<li>	private final Evaluator evaluator;</li>
<li>
</li>
</ol>

se vc não usa o @Path, ele é LOWEST por padrão =(

então se vc coloca o outro path como LOWEST eles ficam na mesma prioridade

R

E se eu colocar como DEFAULT deve funcionar?..

Lucas_Cavalcanti

DEFAULT é maior que LOWEST… então o @Path como default não vai resolver…

teria que mudar o padrão das urls sem @Path (ou similar) =(

R

Não, estou dizendo implementar esta RouteBuilder ou baixar o fonte do vraptor e mudar…

Lucas_Cavalcanti

é, dá pra fazer isso sim, vc sobrescrever o routebuilder padrão do VRaptor…

o que a gente pode fazer é deixar a priority inicial configurável facilmente (estendendo o DefaultRouteBuilder e implementando um método), que acha?

quer implementar e mandar um pull request? =)

R

Valeu lucas, vou testar depois eu posto os resultados…

R

Lucas funcionou…, baixei o fonte e coloquei private int priority = Path.DEFAULT;

Não sei como fazer este pull request que vc falou…

Lucas_Cavalcanti

então, cria um fork lá no github, faz um push pra ele, e manda um pull request (fork e pull request é pela interface do github)…

de qqer forma mudar pra default quebra compatibilidade, o ideal é deixar isso estensível

Criado 22 de setembro de 2011
Ultima resposta 23 de set. de 2011
Respostas 11
Participantes 2
Alura Sistemas operacionais: entenda seu conceito e suas funções Descubra o que são sistemas operacionais, suas funções e tipos. Aprenda tudo de forma clara e objetiva. Não perca tempo!
Casa do Codigo Aprenda JavaScript com Dashboards: Seus primeiros passos... Por Lucas Tauil — Casa do Codigo