BAEL-5936 - OffsetDateTime serialization with Jackson (#13680)
* BAEL-5936 - OffsetDateTime serialization with Jackson * BAEL-5936 - Extracting methods and adding tests * BAEL-5936 - Renaming test file * BAEL-5936 - Changing test method names * BAEL-5936 - removes implements serializable
This commit is contained in:
parent
4050f47183
commit
b5ab6ad906
|
@ -0,0 +1,50 @@
|
|||
package com.baeldung.offsetdatetime;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) throws JsonProcessingException {
|
||||
System.out.println(serializeUser());
|
||||
System.out.println(customSerialize());
|
||||
System.out.println(customDeserialize());
|
||||
}
|
||||
|
||||
static String serializeUser() throws JsonProcessingException {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
objectMapper.registerModule(new JavaTimeModule());
|
||||
|
||||
User user = new User();
|
||||
user.setCreatedAt(OffsetDateTime.parse("2021-09-30T15:30:00+01:00"));
|
||||
|
||||
return objectMapper.writeValueAsString(user);
|
||||
}
|
||||
|
||||
static String customSerialize() throws JsonProcessingException {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
objectMapper.registerModule(new SimpleModule().addSerializer(OffsetDateTime.class, new OffsetDateTimeSerializer()));
|
||||
|
||||
User user = new User();
|
||||
user.setCreatedAt(OffsetDateTime.parse("2021-09-30T15:30:00+01:00"));
|
||||
|
||||
return objectMapper.writeValueAsString(user);
|
||||
}
|
||||
|
||||
static String customDeserialize() throws JsonProcessingException {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
objectMapper.registerModule(new SimpleModule().addDeserializer(OffsetDateTime.class, new OffsetDateTimeDeserializer()));
|
||||
|
||||
String jsonString = "{\"createdAt\":\"30-09-2021 15:30:00 +01:00\"}";
|
||||
User returnedUser = objectMapper.readValue(jsonString, User.class);
|
||||
|
||||
return returnedUser.getCreatedAt().toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.baeldung.offsetdatetime;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class OffsetDateTimeDeserializer extends JsonDeserializer<OffsetDateTime> {
|
||||
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
|
||||
.ofPattern("dd-MM-yyyy HH:mm:ss XXX");
|
||||
|
||||
@Override
|
||||
public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
|
||||
throws IOException {
|
||||
String dateAsString = jsonParser.getText();
|
||||
if (dateAsString == null) {
|
||||
throw new IOException("OffsetDateTime argument is null.");
|
||||
}
|
||||
return OffsetDateTime.parse(dateAsString, DATE_TIME_FORMATTER);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.baeldung.offsetdatetime;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class OffsetDateTimeSerializer extends JsonSerializer<OffsetDateTime> {
|
||||
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
|
||||
.ofPattern("dd-MM-yyyy HH:mm:ss XXX");
|
||||
|
||||
@Override
|
||||
public void serialize(OffsetDateTime value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
|
||||
throws IOException {
|
||||
if (value == null) {
|
||||
throw new IOException("OffsetDateTime argument is null.");
|
||||
}
|
||||
jsonGenerator.writeString(DATE_TIME_FORMATTER.format(value));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.baeldung.offsetdatetime;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public class User {
|
||||
private OffsetDateTime createdAt;
|
||||
|
||||
public User() {
|
||||
}
|
||||
|
||||
public OffsetDateTime getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
public void setCreatedAt(OffsetDateTime createdAt) {
|
||||
this.createdAt = createdAt;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.baeldung.offsetdatetime;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class MainUnitTest {
|
||||
|
||||
@Test
|
||||
void givenUser_whenSerialized_thenCreatedDateIsSerialized() throws JsonProcessingException {
|
||||
Assertions.assertEquals("{\"createdAt\":\"2021-09-30T15:30:00+01:00\"}", Main.serializeUser());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenUser_whenCustomSerialized_thenCreatedDateIsSerialized() throws JsonProcessingException {
|
||||
Assertions.assertEquals("{\"createdAt\":\"30-09-2021 15:30:00 +01:00\"}", Main.customSerialize());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenUser_whenCustomDeserialized_thenCreatedDateIsDeserialized() throws JsonProcessingException {
|
||||
Assertions.assertEquals("2021-09-30T15:30+01:00", Main.customDeserialize());
|
||||
}
|
||||
}
|
|
@ -24,11 +24,6 @@
|
|||
</modules>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>${jackson.version}</version>
|
||||
</dependency>
|
||||
<!--jackson for xml -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||
|
|
Loading…
Reference in New Issue