VRaptor CookBook - URL com "/" e sem funcionando igual para os @Path

Para quem teve dificuldade como eu em conseguir determinar ursl como

@Path(“produto/{produto.id}”)

quando digitava a uri “/produto/1/” e o link não funcionava, segue abaixo uma modificação que corrige o problema.

[code]
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.RequestInfo;
import br.com.caelum.vraptor.http.route.ResourceNotFoundException;
import br.com.caelum.vraptor.http.route.Router;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.DefaultResourceNotFoundHandler;
import br.com.caelum.vraptor.resource.HttpMethod;
import br.com.caelum.vraptor.view.Results;

@Component
@RequestScoped
public class Error404 extends DefaultResourceNotFoundHandler {
private final Router router;
private final Result result;
public Error404(Router router, Result result) {
this.router = router;
this.result = result;
}

@Override
public void couldntFind(RequestInfo requestInfo) {
	try {
		String uri = requestInfo.getRequestedUri();
		if (uri.endsWith("/")) {
			tryMovePermanentlyTo(requestInfo, uri.substring(0, uri.length()-1));
		} else {
			tryMovePermanentlyTo(requestInfo, uri + "/");
		}
	} catch (ResourceNotFoundException ex) {
		super.couldntFind(requestInfo);
	}
}

private void tryMovePermanentlyTo(RequestInfo requestInfo, String newUri) {
	router.parse(newUri, HttpMethod.of(requestInfo.getRequest()), requestInfo.getRequest());
	result.use(Results.http()).movedPermanentlyTo(newUri);
}

}[/code]

Muito obrigado Lavieri!

Estou colocando no site =)

Eu é que agradeço o apoio da equipe da caelum e do vraptor!

e parafraseando o comentário na página do cookbook

“Isso não é necessariamente um problema… a URL /abc é diferente da /abc/ portanto o comportamento de dar 404 é o esperado. Mas se você quiser que sejam urls equivalentes você pode escrever a classe abaixo.”

Lavieri, muito bom.

Essa é a coisa boa do vraptor… você sempre consegue adaptar conforme a vontade e de forma bem simples.

Estranho, mas eu não tenho o método requestInfo.getRequestedUri();

esse método foi adicionado na versão 3.0.2 =)

Poxa, eu fiz um fork um pouco antes de sair essa versão e fiquei obsoleto nele, hahahaha. Esse fork eu fiz para aquela correção do magic map, que aliás vou te mandar esse final de semana.

Abraços,

para atualizar o seu fork, tente fazer:

git add remote caelum git://github.com/caelum/vraptor.git
git pull caelum master

talvez dê algum erro de merge, mas daí é só corrigir e commitar =)

pra mandar a correção é só clicar em pull request na página do seu fork no github
Obrigado =)

O comando que funcionou aqui (ao menos na versão do git que estou usando) para adicionar outro remoto é :
git remote add caelum git://github.com/caelum/vraptor.git