Bom dia, como faço para utilizar o java.time.LocalDate invés do java.util.Calendar? Quando substituo o Calendar por LocalDate o atributo passa a chegar na minha classe de validação sempre com valor null.
Bom dia, como faço para utilizar o java.time.LocalDate invés do java.util.Calendar? Quando substituo o Calendar por LocalDate o atributo passa a chegar na minha classe de validação sempre com valor null.
Oi Andréa,
No Spring 4.0 foi introduzido o suporte a nova API de data do Java 8.
Mas se você estiver utilizando o Spring 3, terá de criar um conversor manualmente =/
Bons estudos!
Boa tarde Rodrigo, eu estou usando o Spring 4.
===== Model =====
@DateTimeFormat private LocalDate data;
===== jsp =====
form:input path="data"
===== AppWebConfiguration =====
@Bean public FormattingConversionService mvcConversionService() { DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(); DateFormatterRegistrar registrar = new DateFormatterRegistrar(); registrar.setFormatter(new DateFormatter("dd/MM/yyyy")); registrar.registerFormatters(conversionService); return conversionService; }
Precisa fazer alguma mudança no método de conversão? Ou existe alguma dependência que tenho que adicionar no meu pom.xml que seja referente as datas Java 8?
Oi Andréa,
Apesar do Spring 4 suportar a nova api de data do java 8, quem ainda não suporta é a JPA. E isso complica as coisas, pois sempre trabalhamos com datas que são enviadas para o banco e carregadas do banco.
Você teria que usar um conversor do JPA para isso. Algo assim:
import java.util.Date;
@Converter(autoApply = true)
public class LocalDateConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate date) {
Instant instant = Instant.from(date);
return Date.from(instant);
}
@Override
public LocalDate convertToEntityAttribute(Date value) {
Instant instant = value.toInstant();
return LocalDate.from(instant);
}
}
Porém a annotation @DateTimeFormat
não é mais possível usar, pois ela só funciona com Date
ou Calendar
.
Veja se lhe ajuda em algo.
Abraço