Vraptor3: Character em resources-rest [resolvido]

A pouco adicionei um método em um controller que recebe um Character, e esse parametro vem da URI. Porém sempre que tento acessar a página recebo um page-not-found. Quando altero o parametro como String a página é processada normalmente.

Fiz um debug e o converter de Character nunca é chamado.

INFO: /customer/ [GET] -> CustomerController.list(Character, Paging) INFO: /customer/page-{paging}/ [GET] -> CustomerController.list(Character, Paging) INFO: /customer/{letter}/page-{paging}/ [GET] -> CustomerController.list(Character, Paging)

FINE: Invoking interceptor ResourceLookupInterceptor FINE: trying to access /customer/A/page-1/ FINE: VRaptor ended the request

estranho… já tentou com char ao invés de Character? é ruim usar String?

pra garantir que é uma letra só vc pode fazer:

@Path("/customer/{letter:[A-Z]}/page-{paging}/") 

vc pode passar qqer regex depois dos ‘:’ :wink:

de qqer forma, vou investigar pq não funciona

Problema em usar String não é, mas como esse campo é um char quero já recebe-lo como char. Temporariamente estou recebendo via vraptor como String porém chamo um letter.charAt(0) antes de chamar o EJB, então tá tranquilo.

Lucas, vou fazer mais uns testes como você falou usando char e verifico se ele está registrando o converter. E te aviso.

Abraços

Fiz uns testes aqui e mesmo trocando o ognl pelo iogi está dando erro. Por um instante achei ser o tradutor de parametros.

Porém notei que quando uso por exemplo /customer/5 funciona, porém /customer/x não funciona. Ele nem mesmo chama o converter, e o erro retornado é um http-404.

Se eu usar /customer/{letter:[A-Z]}/ ele entra no método porém com o letter = null.

ele deve estar tratando char como número (afinal, ele é um número) por isso tá acontecendo esse tipo de coisa =(

Pois foi o que eu notei. Porém se eu passar 5 como parametro ele me imprime 5 na tela. Se ele fosse trabalhar com char sendo int deveria imprimir um caractere “fora do espectro”. O mais estranho ainda é que ele não chama nenhum converter. Coloquei um breakpoint em todos os converters mas nenhum é chamado.

Outra coisa que eu notei é que com regex ele até acha o método, porém todo e qualquer parametro é passado como null mesmo que eu passe o parametro.

bom, corrigi esse bug no código… (eu tava tratando char como número mesmo =/)

http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100510.222134-3.jar

Abraços

Perfeito, está funcionando mesmo. Valeu Lucas :thumbup:

KKKKKKKKKKK

2 horas da minha vida perdidas…

Devia ter vindo aqui no fórum antes.

Valeu

Problemas novamente…

o que estou fazendo de errado?

	@Path("/apelido/{apelido:[A-Z]}")
	public void atalho(String apelido) {
		System.out.println("APELIDO: " + apelido);
	}

ai eu chamo /apelido/A e recebo APELIDO: null

Qual versão do vraptor que você está usando? Ou está usando qual snapshot?

vraptor2-2.6.2.jar
vraptor-3.1.3-20100510.222134-3.jar

bug corrigido, use esse snapshot:

http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.1.3-SNAPSHOT/vraptor-3.1.3-20100519.161626-7.jar