Criando conversor para valores monetários no VRaptor 3

Boa noite a todos,

Hoje quando comecei a testar uma tela nova, percebi que estava ‘ganhando’ exceções ao salvar um formulário que continha um campo do tipo Double em que eu preenchi um valor em formato de moeda “1.500.444,99”. Bom o que fazer, fucei um pouco no código fonte do VRaptor olhando os seus conversores padrões e vi que não estava legal o conversor de Doubles, assim acabei implementando um conversor para atender o meu problema. Abaixo segue a solução, que foi bem simples de resolver.

[java]

package vraptor.utils.converters;

import java.util.ResourceBundle;
import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;

@Convert(Double.class)
public class DoubleMoneyConverter implements Converter<Double>
{

@Override
public Double convert(String value, Class<? extends Double> type, ResourceBundle bundle)
{
//4500,50 –> 4500.50
//4500.50 –> 450050
//1500    –> 1500
//1.500      –> 1500
//1,583   –> 1.583
if(value != null && !value.isEmpty())
{
Double valor = null;
try
{
// Se contém ponto e não contém virgula, converte direto.
if(value.matches(“.*\..*”) && !value.matches(“.*,.*”))
{
// Faz nada
//valor = new Double(Double.parseDouble(value));
}
else
{
// Se contém apenas virgula e nenhum ponto.
if(!value.matches(“.*\..*”) && value.matches(“.*,.*”))
{
value = value.replaceAll(“\,”, “.”);
}
else
{
// Pontos e virgula, conversão normal.
value = value.replaceAll(“\.”, “”).replaceAll(“\,”, “.”);
}
}
// Parse
valor = new Double(Double.parseDouble(value));

} catch (NumberFormatException e) {
e.printStackTrace();
}
return valor;
}
else
{
return null;
}
}
}

[/java]

Quando eu utilizo a anotação @Convert(Double.class), estou adicionando no contexto do VRaptor que todo o formulário que tiver um campo Double irá passar por este conversor.

Conclusão

A estrutura do VRaptor 3 torna muito simples de resolvermos problemas corriqueiros do dia a dia de desenvolvimento. O esquema dos seus conversores através de anotações nas classes de conversão torna muito simples de criarmos lógicas para resolver pequenos e grandes problemas nos sistemas que desenvolvemos.

Para desenvolvermos os nossos conversores, controladores, recursos, componentes, etc., apenas precisamos anotar as nossas classes que o VRaptor adiciona no seu contexto durante a inicialização da aplicação.

Referências

http://vraptor.caelum.com.br/documentacao/conversores/

Bom é isso aí, um abraços a todos e até a próxima.