3
respostas

FormattingConversionService erro no tipo de dado

oioi, meu método de conversão nao está funcionando... infoma tipo de dado inválido ao passar dd/MM/yyyy

    @Bean
    public FormattingConversionService mvcConversionService() {
        DefaultFormattingConversionService conversionService = 
            new DefaultFormattingConversionService();
        DateFormatterRegistrar registrar = new DateFormatterRegistrar();
        registrar.setFormatter(new DateFormatter("dd/MM/yyyy"));
        registrar.registerFormatters(conversionService);

        return conversionService;
    }
import org.springframework.format.annotation.DateTimeFormat;

@DateTimeFormat
    private Calendar dataLancamento;
3 respostas

Olá Aline, tudo bem ?

No projeto (equivalente ao) curso que tenho aqui, tenho a seguinte configuração do conversion service:

@Bean
public FormattingConversionService mvcConversionService() {
    DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(true);

    DateFormatterRegistrar registrar = new DateFormatterRegistrar();
    registrar.setFormatter(new DateFormatter("yyyy-MM-dd"));
    registrar.registerFormatters(conversionService);

    return conversionService;
}

Aí percebi duas diferenças entre os códigos:

1) Quando instancio a classe DefaultFormattingConversionService uso a sobrecarga do construtor que recebe um boolean. Na documentação da classe fica claro que este construtor leva em conta todos os formatters default do framework, fazendo com que nossa configuração adicione recurso sobre este conjunto, e não crie uma representação "do zero".

** DefaultFormattingConversionService(boolean registerDefaultFormatters)

Create a new DefaultFormattingConversionService with the set of default converters and, based on the value of registerDefaultFormatters, the set of default formatters.

2) O pattern usado "yyyy-MM-dd" em vez de "dd/MM/yyyy". Essa aqui imagino que seja menos relevante. Usei essa configuração pois recebia o valor a partir de um input type date do HTML que passa através desse primeiro padrão a data. Se na sua app você passa seguindo 01/01/1900 creio que não seja problema.

Dê uma olhada nessa questão, tente fazer as alteções e testar, certifique-se que o valor enviado esteja de acordo com o pattern registrado, etc.

Espero ter ajudado. Abraço!

oi Rafael, obrigada pelos toques... to refazendo o projeto e tentei com esses ajustes mas ainda assim não foi....

está caindo na validação do message.properties: O tipo de dado foi inválido então tirei essa validação do properties pra dar uma olhada e retornou:

Data Lançamento  
 Failed to convert property value of type java.lang.String to required type java.util.Calendar for property dataLancamento; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.format.annotation.DateTimeFormat java.util.Calendar for value 2012-01-01; nested exception is java.lang.IllegalArgumentException: Unable to parse 2012-01-01

Oi Aline, tudo bem ?

Perceba que a exception mostra qual foi o valor de entrada que ela não conseguiu converter: Unable to parse 2012-01-01

Esse valor dá match com esse pattern: yyyy-MM-dd, mas não com o dd/MM/yyyy, por exemplo. Se a página envia a data dessa forma (2012-01-01) certifique-se que o pattern adequado está sendo utilizado.

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software