Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Configurando pelo AppWebConfiguration com Spring Boot

Tentei configurar o método

@Bean 
    public FormattingConversionService dataConversionService() { ...}

na classe de configuração do Spring boot (@SpringBootApplication) , mas a configuração não foi registrada... Existe alguma configuração adicional?

4 respostas

Boa noite João, lembre que o nome do método deve ser mvcConversionService.

O problema ainda persiste. Veja como ficou a minha classe de configuração com Spring Boot... Existe alguma configuração adicional no Spring Boot?

@SpringBootApplication
public class LojaDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(LojaDemoApplication.class, args);
    }

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

        DateFormatterRegistrar registrar = new DateFormatterRegistrar();
        registrar.setFormatter( new DateFormatter("dd/MM/yyyy") );

        registrar.registerFormatters(conversionService);

        return conversionService;

    }
}
solução!

Bom dia amigo,

sei que o exemplo ilustrado na aula é mais para explicar o uso dos conversores com spring, mas permita-me mostrar uma solução mais elegante para seu problema:

1 - Primeiramente adicione o seguinte código na classe LojaDemoApplication:

@SpringBootApplication
public class LojaDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(LojaDemoApplication.class, args);
    }

    @Bean
    public LocaleResolver localeResolver(){
        return new FixedLocaleResolver(new Locale("pt", "BR"));
    }
}

2 - Agora na sua entidade basta adicionar a anotação nos seus atributos que são do tipo calendar:

@DateTimeFormat(pattern="dd/MM/yyyy")
@Temporal(TemporalType.DATE)
private Calendar dataNascimento;

tá feito! :) agora na sua view basta enviar uma data no padrão que foi configurado, ex: (28/02/2017) que o spring mvc converterá automaticamente.

No Spring Boot, além da solução que o João Antônio apresentou, que funciona 100% e é a que eu prefiro, você também pode registrar um conversor global (aí não vai precisa anotar o padrão nas classes). Exemplo:

@Component
public class StringToCalendarConverter implements Converter<String, Calendar> {

    @Override
    public Calendar convert(String string) {

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

        try {

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(sdf.parse(string));

            return calendar;

            } catch (ParseException e) {

                //e.printStackTrace();
                System.out.println("Não consegui converter num Calendar. String: " + string);
                return null;
            }
    }
}