Skip to content

Commit

Permalink
api
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-cherednik committed Feb 6, 2024
1 parent 60885a5 commit 6f06420
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 6 deletions.
5 changes: 4 additions & 1 deletion src/main/java/ru/olegcherednik/json/impl/JacksonFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,10 @@
import ru.olegcherednik.json.jackson.JacksonEngine;
import ru.olegcherednik.json.jackson.datetime.JacksonDateModule;
import ru.olegcherednik.json.jackson.datetime.JacksonJavaTimeModule;
import ru.olegcherednik.json.jackson.datetime.serializers.key.JacksonNullKeySerializer;
import ru.olegcherednik.json.jackson.JacksonNullKeySerializer;
import ru.olegcherednik.json.jackson.enumid.EnumIdModule;

import java.util.Map;
import java.util.Objects;
import java.util.ServiceLoader;
import java.util.TimeZone;
Expand Down Expand Up @@ -69,6 +70,8 @@ private static ObjectMapper config(ObjectMapper mapper, JsonSettings settings) {
mapper.setTimeZone(TimeZone.getTimeZone(settings.getZoneId()));

mapper.getSerializerProvider().setNullKeySerializer(JacksonNullKeySerializer.INSTANCE);
mapper.configOverride(Map.class).setInclude(JsonInclude.Value.construct(JsonInclude.Include.NON_NULL,
JsonInclude.Include.ALWAYS));

return mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package ru.olegcherednik.json.jackson.datetime.serializers.key;
package ru.olegcherednik.json.jackson;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializationFeature;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package ru.olegcherednik.json.jackson.datetime.serializers.key;
package ru.olegcherednik.json.jackson;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
Expand All @@ -31,10 +31,13 @@
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class JacksonNullKeySerializer extends JsonSerializer<Object> {

public static final String NULL_VALUE = "";


public static final JacksonNullKeySerializer INSTANCE = new JacksonNullKeySerializer();

@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeFieldName("");
gen.writeFieldName(NULL_VALUE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.KeyDeserializer;
import lombok.RequiredArgsConstructor;
import ru.olegcherednik.json.jackson.JacksonNullKeySerializer;

import java.io.IOException;
import java.time.Instant;
Expand Down Expand Up @@ -73,7 +74,9 @@ public static JacksonJsr310KeyDeserializer<ZonedDateTime> zonedDateTime(DateTime

@Override
public final Object deserializeKey(String key, DeserializationContext ctxt) throws IOException {
return "".equals(key) ? null : df.parse(key, query);
if (JacksonNullKeySerializer.NULL_VALUE.equals(key))
return null;
return df.parse(key, query);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package ru.olegcherednik.json.jackson.datetime.serializers.key;

import ru.olegcherednik.json.jackson.JacksonKeySerializer;

import java.time.Instant;
import java.time.format.DateTimeFormatter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package ru.olegcherednik.json.jackson.datetime.serializers.key;

import ru.olegcherednik.json.jackson.JacksonKeySerializer;

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package ru.olegcherednik.json.jackson.datetime.serializers.key;

import ru.olegcherednik.json.jackson.JacksonKeySerializer;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package ru.olegcherednik.json.jackson;

import org.testng.annotations.Test;
import ru.olegcherednik.json.api.Json;

import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;

/**
* @author Oleg Cherednik
* @since 06.02.2024
*/
@Test
public class MapNullKeyValueTest {

public void shouldSerializeNulWhenWriteMap() {
Map<String, String> expected = MapUtils.of("one", "1",
"two", null);
String json = Json.writeValue(expected);
assertThat(json).isNotNull();
assertThat(json).isEqualTo("{\"one\":\"1\",\"two\":null}");

Map<String, String> actual = Json.readMap(json, String.class, String.class);
assertThat(actual).isEqualTo(expected);

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
@SuppressWarnings("NewClassNamingConvention")
public class JacksonJsr310KeyDeserializerTest {

public void shouldSerializeNullKeyAsEmptyString() {
public void shouldSerializeNullKeyAsNullString() {
LocalDate one = LocalDate.parse("2023-05-05");
LocalDate two = LocalDate.parse("2023-06-06");

Expand Down

0 comments on commit 6f06420

Please sign in to comment.