Skip to content

Commit

Permalink
api
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-cherednik committed Feb 18, 2024
1 parent c0a7a0a commit fe70e5a
Show file tree
Hide file tree
Showing 7 changed files with 116 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package ru.olegcherednik.json.jackson;

import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
* @author Oleg Cherednik
* @since 18.02.2024
*/
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class JacksonSimpleModule extends SimpleModule {

private static final long serialVersionUID = -543871656247679655L;

@Override
public void setupModule(SetupContext context) {
super.setupModule(context);

addKeySerializers(context);
addKeyDeserializers(context);

addSerializers(context);
addDeserializers(context);
}

protected void addKeySerializers(SetupContext context) {
}

protected void addKeyDeserializers(SetupContext context) {
}

protected void addSerializers(SetupContext context) {
}

protected void addDeserializers(SetupContext context) {
}

protected static <T> SimpleSerializers createSerializers(JsonSerializer<T> serializer) {
SimpleSerializers serializers = new SimpleSerializers();
serializers.addSerializer(serializer.handledType(), serializer);
return serializers;
}

protected static <T> SimpleDeserializers createDeserializers(JsonDeserializer<T> deserializer) {
SimpleDeserializers deserializers = new SimpleDeserializers();
deserializers.addDeserializer((Class<T>) deserializer.handledType(), deserializer);
return deserializers;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@

package ru.olegcherednik.json.jackson.datetime;

import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
import com.fasterxml.jackson.databind.module.SimpleKeyDeserializers;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.module.SimpleSerializers;
import com.fasterxml.jackson.databind.ser.std.DateSerializer;
import lombok.RequiredArgsConstructor;
import ru.olegcherednik.json.jackson.JacksonSimpleModule;
import ru.olegcherednik.json.jackson.datetime.deserializers.JacksonDateDeserializer;

import java.text.DateFormat;
Expand All @@ -32,37 +35,31 @@
* @since 09.12.2023
*/
@RequiredArgsConstructor
public class JacksonDateModule extends SimpleModule {
public class JacksonDateModule extends JacksonSimpleModule {

private static final long serialVersionUID = -7801651470699380868L;

protected final DateFormat df;

@Override
public void setupModule(SetupContext context) {
super.setupModule(context);
addSerializers(context);
addKeyDeserializers(context);
addDeserializers(context);
protected void addKeySerializers(SetupContext context) {
context.addKeySerializers(createSerializers(new DateSerializer(null, df)));
}

private void addSerializers(SetupContext context) {
SimpleSerializers ser = new SimpleSerializers();
ser.addSerializer(Date.class, new DateSerializer(null, df));
// TODO check this out. Looks like it does not work now
// @Override
// protected void addKeyDeserializers(SetupContext context) {
// context.addKeyDeserializers(new SimpleKeyDeserializers());
// }

context.addSerializers(ser);
context.addKeySerializers(ser);
}

private static void addKeyDeserializers(SetupContext context) {
SimpleKeyDeserializers des = new SimpleKeyDeserializers();
context.addKeyDeserializers(des);
@Override
protected void addSerializers(SetupContext context) {
context.addSerializers(createSerializers(new DateSerializer(null, df)));
}

private void addDeserializers(SetupContext context) {
SimpleDeserializers des = new SimpleDeserializers();
des.addDeserializer(Date.class, JacksonDateDeserializer.with(df));
context.addDeserializers(des);
@Override
protected void addDeserializers(SetupContext context) {
context.addDeserializers(createDeserializers(JacksonDateDeserializer.with(df)));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,33 @@

package ru.olegcherednik.json.jackson.enumid;

import com.fasterxml.jackson.databind.module.SimpleModule;
import ru.olegcherednik.json.api.enumid.EnumId;
import ru.olegcherednik.json.jackson.JacksonSimpleModule;
import ru.olegcherednik.json.jackson.enumid.deserializers.EnumIdDeserializers;
import ru.olegcherednik.json.jackson.enumid.serializers.EnumIdKeySerializer;
import ru.olegcherednik.json.jackson.enumid.serializers.EnumIdSerializer;

public final class EnumIdModule extends SimpleModule {
public class EnumIdModule extends JacksonSimpleModule {

private static final long serialVersionUID = -946898814418994813L;

public EnumIdModule() {
addSerializer(EnumId.class, EnumIdSerializer.INSTANCE);
addKeySerializer(EnumId.class, EnumIdKeySerializer.INSTANCE);
_deserializers = EnumIdDeserializers.INSTANCE;
}

@Override
public void setupModule(SetupContext context) {
super.setupModule(context);
context.addBeanSerializerModifier(EnumIdSerializerModifier.INSTANCE);
}

@Override
protected void addKeySerializers(SetupContext context) {
context.addKeySerializers(createSerializers(EnumIdKeySerializer.INSTANCE));
}

@Override
protected void addSerializers(SetupContext context) {
context.addSerializers(createSerializers(EnumIdSerializer.INSTANCE));
}

@Override
protected void addDeserializers(SetupContext context) {
context.addDeserializers(EnumIdDeserializers.INSTANCE);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@
* @author Oleg Cherednik
* @since 27.02.2022
*/
final class EnumIdSerializerModifier extends SerializerModifier {
public class EnumIdSerializerModifier extends SerializerModifier {

private static final long serialVersionUID = -1888579980196998551L;

public static final EnumIdSerializerModifier INSTANCE = new EnumIdSerializerModifier();

private EnumIdSerializerModifier() {
protected EnumIdSerializerModifier() {
super(null);
}

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.enumid;
package ru.olegcherednik.json.jackson.enumid.deserializers;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.BeanDescription;
Expand All @@ -36,8 +36,8 @@
* @author Oleg Cherednik
* @since 27.02.2022
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
final class EnumIdDeserializers extends SimpleDeserializers {
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class EnumIdDeserializers extends SimpleDeserializers {

private static final long serialVersionUID = -6984119149643932744L;

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.enumid;
package ru.olegcherednik.json.jackson.enumid.serializers;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
Expand All @@ -25,14 +25,19 @@

import java.io.IOException;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
final class EnumIdKeySerializer extends JsonSerializer<EnumId> {
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class EnumIdKeySerializer extends JsonSerializer<EnumId> {

public static final EnumIdKeySerializer INSTANCE = new EnumIdKeySerializer();

@Override
public void serialize(EnumId enumId, JsonGenerator generator, SerializerProvider serializers) throws IOException {
generator.writeFieldName(enumId.getId());
public Class<EnumId> handledType() {
return EnumId.class;
}

@Override
public void serialize(EnumId enumId, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeFieldName(enumId.getId());
}

}
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.enumid;
package ru.olegcherednik.json.jackson.enumid.serializers;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
Expand All @@ -31,11 +31,16 @@
* {@link EnumId#getId()} returns lower-case enum constant name (instead of upper-case by default). Therefor you have
* to define {@link ru.olegcherednik.json.api.enumid.EnumIdJsonCreator} for every {@link EnumId} instance.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
final class EnumIdSerializer extends JsonSerializer<EnumId> {
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class EnumIdSerializer extends JsonSerializer<EnumId> {

public static final EnumIdSerializer INSTANCE = new EnumIdSerializer();

@Override
public Class<EnumId> handledType() {
return EnumId.class;
}

@Override
public void serialize(EnumId enumId, JsonGenerator generator, SerializerProvider serializers) throws IOException {
generator.writeString(enumId.getId());
Expand Down

0 comments on commit fe70e5a

Please sign in to comment.