Estou tendo um pequeno problema com a formatação de um LocalDateTime Java 8 em meu aplicativo Spring Boot. Com datas 'normais', não tenho problemas, mas os campos LocalDateTime são convertidos para o seguinte:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Embora eu queira convertê-lo para algo como:
"startDate": "2015-01-01"
Meu código é parecido com este:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Mas qualquer uma das anotações acima não funciona, a data continua sendo formatada como acima. Sugestões bem-vindas!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
entrada, como sugerido pela resposta @patelb.@JsonSerialize
anotação que Nick mencionou para fazê-lo funcionar.Adicionei a
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
dependência e comecei a obter a data no seguinte formato:o que não era o que eu queria, mas estava chegando perto. Eu então adicionei o seguinte
para o arquivo application.properties que me forneceu o formato correto que eu precisava.
fonte
jackson-datatype-jsr310
dependência. Esta deve ser a resposta aceita.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Aqui está em maven, com a propriedade para que você possa sobreviver entre atualizações de botas de primavera
fonte
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Dependência
2) Anotação com formato data-hora.
3) Spring Config.
fonte
Eu encontrei outra solução que você pode converter para qualquer formato que você quiser e aplicar a todos os tipos de dados LocalDateTime e você não precisa especificar @JsonFormat acima de todos os tipos de dados LocalDateTime. primeiro adicione a dependência:
Adicione o seguinte bean:
em seu arquivo de configuração, adicione o seguinte:
Isso serializará e desserializará todas as propriedades LocalDateTime e ZonedDateTime, desde que você esteja usando o objectMapper criado na primavera.
O formato que você obteve para ZonedDateTime é: "2017-12-27T08: 55: 17.317 + 02: 00 [Ásia / Jerusalém]" para LocalDateTime é: "2017-12-27T09: 05: 30.523"
fonte
SimpleModule
estendeModule
.Module
é um abstrato.val bean = new SimpleModule();
funciona perfeito.Escrevendo esta resposta como um lembrete para mim também.
Combinei várias respostas aqui e no final a minha funcionou com algo assim. (Estou usando SpringBoot 1.5.7 e Lombok 1.16.16)
fonte
DateTimeFormat
e outros.Isso funciona bem:
Adicione a dependência:
Adicione a anotação:
Agora, você deve obter o formato correto.
Para usar o mapeador de objetos, você precisa registrar o JavaTime
fonte
Como já mencionamos, o spring-boot irá buscar tudo que você precisa (tanto para web quanto para iniciante do webflux).
Mas o que é ainda melhor - você não precisa registrar nenhum módulo. Dê uma olhada aqui . Uma vez que
@SpringBootApplication
usa@EnableAutoConfiguration
sob o capô, significaJacksonAutoConfiguration
que será adicionado ao contexto automaticamente. Agora, se você olhar para dentroJacksonAutoConfiguration
, verá:Este fella será chamado no processo de inicialização e irá buscar todos os módulos que puder encontrar no classpath. (Eu uso Spring Boot 2.1)
fonte
Estou usando o Springboot 2.0.6 e, por algum motivo, as alterações do yml do aplicativo não funcionaram. E também tive mais requisitos.
Tentei criar ObjectMapper e marcá-lo como Primário, mas o Spring Boot reclamou que já tenho jacksonObjectMapper marcado como Primário !!
Então foi isso que eu fiz. Fiz alterações no mapeador interno.
Meu serializador e desserializador são especiais - eles lidam com 'dd / MM / AAAA'; e durante a desserialização - ele tenta o seu melhor para usar o formato popular 3-4 para se certificar de que tenho algum LocalDate.
fonte
@JsonDeserialize(using= LocalDateDeserializer.class)
não funciona para mim com a dependência abaixo.Usei o conversor de código abaixo para desserializar a data em um
java.sql.Date
.fonte
simplesmente use:
ou você pode usar o padrão como quiser, por exemplo:
('-' in place of '/')
fonte
Estou usando o Spring Boot 2.1.8. Eu importei
que inclui o jackson-datatype-jsr310 .
Então, eu tive que adicionar essas anotações
e funciona. O JSON se parece com isto:
fonte
spring-boot-starter-json
só é necessária sespring-boot-starter-web
estiver faltando.