diff --git a/sqlschema2java-core/pom.xml b/sqlschema2java-core/pom.xml
index 20c23b3..ab1983e 100644
--- a/sqlschema2java-core/pom.xml
+++ b/sqlschema2java-core/pom.xml
@@ -180,6 +180,12 @@
2.13.2.2
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ 2.13.2
+
+
junit
junit
diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java
index 4a1ca6a..9320a38 100644
--- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java
+++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/factory/impl/DTOFactory.java
@@ -1,7 +1,7 @@
package dev.sassine.api.structure.export.builder.factory.impl;
import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importEntityClass;
-import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importJavaTime;
+import static dev.sassine.api.structure.export.builder.function.ImportBeanFunction.importJavaTimeAndJSONDeserialize;
import static dev.sassine.api.structure.export.builder.function.StoreClassFuncation.store;
import static java.lang.String.format;
import static java.lang.reflect.Modifier.PUBLIC;
@@ -38,7 +38,7 @@ public class DTOFactory implements Factory {
private static final String FORMAT_NEW_ENTITY_METHOD = "%s entity = new %s();";
private static final String FORMAT_STRING_FIELDS = "\"%s\"";
private static final String FORMAT_PACKAGE_DOT_PACKAGE = "%s.%s";
- private static final String FORMAT_SETTER_EQ_GETTER = "this.%s = entity.get%s();";
+ private static final String FORMAT_SET_VALUE = "entity.set%s(this.%s);";
private static final String PARAM_VALUE = "value";
@Override
@@ -56,7 +56,7 @@ public void execute(EntityModel entityModel,boolean isAutoGenerated, String name
log.debug("Prepare generate ({}) fields", entityModel.getFields().size());
entityModel.getFields().forEach(fieldModel -> {
VariableSourceGenerator field = this.buildField(fieldModel);
- importJavaTime(gen, fieldModel);
+ importJavaTimeAndJSONDeserialize(field,gen, fieldModel);
this.addFunctionToMethodFunction(fm, fieldModel);
log.debug("Adding field in functionMethod toEntity");
clDTO.addField(field);
@@ -76,7 +76,7 @@ private void closeMethodFunction(FunctionSourceGenerator functionMethodToEntity)
}
private void addFunctionToMethodFunction(FunctionSourceGenerator functionMethodToEntity, FieldModel fieldModel) {
- functionMethodToEntity.addBodyCodeLine(format(FORMAT_SETTER_EQ_GETTER, fieldModel.getCamelName(), fieldModel.getCamelNameUpper()));
+ functionMethodToEntity.addBodyCodeLine(format(FORMAT_SET_VALUE, fieldModel.getCamelNameUpper(), fieldModel.getCamelName()));
}
private VariableSourceGenerator buildField(FieldModel fieldModel) {
diff --git a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java
index 745b5f6..6cdbe52 100644
--- a/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java
+++ b/sqlschema2java-core/src/main/java/dev/sassine/api/structure/export/builder/function/ImportBeanFunction.java
@@ -9,12 +9,21 @@
import java.time.LocalDateTime;
import java.time.LocalTime;
+import org.burningwave.core.classes.AnnotationSourceGenerator;
+import org.burningwave.core.classes.TypeDeclarationSourceGenerator;
import org.burningwave.core.classes.UnitSourceGenerator;
+import org.burningwave.core.classes.VariableSourceGenerator;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import dev.sassine.api.structure.model.java.FieldModel;
public class ImportBeanFunction {
+ private static final String PARAM_USING = "using";
private static final String FORMAT_IMPORT_ENTITY_PACKAGE = "%s.domain.%sEntity";
public static void importEntityClass(String nameClass, String packageName, UnitSourceGenerator gen) {
@@ -26,5 +35,24 @@ public static void importJavaTime(UnitSourceGenerator gen, FieldModel fieldModel
else if (TYPE_LOCAL_DATE.equals(fieldModel.getType())) gen.addImport(LocalDate.class);
else if (TYPE_LOCAL_TIME.equals(fieldModel.getType())) gen.addImport(LocalTime.class);
}
-
+
+ public static void importJavaTimeAndJSONDeserialize(VariableSourceGenerator field, UnitSourceGenerator gen,
+ FieldModel fieldModel) {
+ if (TYPE_LOCAL_DATE_TIME.equals(fieldModel.getType())) {
+ field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING,
+ VariableSourceGenerator
+ .create(TypeDeclarationSourceGenerator.create(LocalDateTimeDeserializer.class))));
+ gen.addImport(LocalDateTime.class);
+ } else if (TYPE_LOCAL_DATE.equals(fieldModel.getType())) {
+ gen.addImport(LocalDate.class);
+ field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING,
+ VariableSourceGenerator
+ .create(TypeDeclarationSourceGenerator.create(LocalDateDeserializer.class))));
+ } else if (TYPE_LOCAL_TIME.equals(fieldModel.getType())) {
+ gen.addImport(LocalTime.class);
+ field.addAnnotation(AnnotationSourceGenerator.create(JsonDeserialize.class).addParameter(PARAM_USING,
+ VariableSourceGenerator
+ .create(TypeDeclarationSourceGenerator.create(LocalTimeDeserializer.class))));
+ }
+ }
}