Como faço para que Jackson serialize meu objeto Joda DateTime de acordo com um padrão simples (como "dd-MM-aaaa")?
Eu tentei:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Eu também tentei:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Obrigado!
Respostas:
Isso se tornou muito fácil com Jackson 2.0 e o módulo Joda.
Dependência de Maven:
Código e documentação: https://github.com/FasterXML/jackson-datatype-joda
Binários: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
fonte
No objeto que você está mapeando:
Em CustomDateSerializer:
fonte
org.codehaus.jackson
vez decom.fasterxml.jackson.core
. Usar o segundo pacote não funcionou para mim. Na verdade, meu aplicativo de Jersey nem mesmo respeitou a@JsonSerialized
anotação.Como @Kimble disse, com Jackson 2, usar a formatação padrão é muito fácil; basta se cadastrar
JodaModule
no seuObjectMapper
.Para serialização / desserialização customizada de
DateTime
, você precisa implementar seu próprioStdScalarSerializer
eStdScalarDeserializer
; é muito complicado, mas de qualquer maneira.Por exemplo, aqui está um
DateTime
serializador que usaISODateFormat
com o fuso horário UTC:E o desserializador correspondente:
Em seguida, vincule-os com um módulo:
Em seguida, registre o módulo em
ObjectMapper
:fonte
A solução fácil
Encontrei um problema semelhante e minha solução é muito mais clara do que a acima.
Eu simplesmente usei o padrão na
@JsonFormat
anotaçãoBasicamente, minha classe tem um
DateTime
campo, então coloco uma anotação ao redor do getter:Eu serializo a classe com
ObjectMapper
Usamos Jackson 2.5.4
fonte
https://stackoverflow.com/a/10835114/1113510
Embora você possa colocar uma anotação para cada campo de data, é melhor fazer uma configuração global para seu mapeador de objetos. Se você usa jackson, pode configurar sua mola da seguinte maneira:
Para CustomObjectMapper:
Claro, SimpleDateFormat pode usar qualquer formato de que você precisa.
fonte
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
fez o truque para mim, thxEnquanto isso, Jackson registra o módulo Joda automaticamente quando o JodaModule está no caminho de classe. Acabei de adicionar jackson-datatype-joda ao Maven e funcionou instantaneamente.
Saída JSON:
fonte
Para aqueles com Spring Boot, você deve adicionar o módulo ao seu contexto e ele será adicionado à sua configuração assim.
E se você quiser usar o novo módulo de tempo java8 jsr-310.
fonte
Parece que para Jackson 1.9.12 não existe essa possibilidade por padrão, devido a:
Esta classe serializa os dados usando o método toString () do Joda DateTime.
A abordagem proposta por Rusty Kuntz funciona perfeitamente para o meu caso.
fonte
Estou usando Java 8 e isso funcionou para mim.
Adicione a dependência de
pom.xml
e adicionar JodaModule em seu
ObjectMapper
fonte