[FEAT] use a generic ObjectMapper factory to support the same suset of the tools
This commit is contained in:
parent
b581702df4
commit
b6bf7acd79
14
src/org/kar/archidata/converter/jackson/JacksonModules.java
Normal file
14
src/org/kar/archidata/converter/jackson/JacksonModules.java
Normal file
@ -0,0 +1,14 @@
|
||||
package org.kar.archidata.converter.jackson;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import com.fasterxml.jackson.databind.module.SimpleModule;
|
||||
|
||||
public class JacksonModules {
|
||||
public static SimpleModule getAllModules() {
|
||||
final SimpleModule module = new SimpleModule();
|
||||
module.addSerializer(ObjectId.class, new ObjectIdSerializer());
|
||||
module.addDeserializer(ObjectId.class, new ObjectIdDeserializer());
|
||||
return module;
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package org.kar.archidata.converter.jackson;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
|
||||
public class ObjectIdDeserializer extends JsonDeserializer<ObjectId> {
|
||||
@Override
|
||||
public ObjectId deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException {
|
||||
return new ObjectId(p.getValueAsString());
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package org.kar.archidata.converter.jackson;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bson.types.ObjectId;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
|
||||
public class ObjectIdSerializer extends JsonSerializer<ObjectId> {
|
||||
@Override
|
||||
public void serialize(final ObjectId value, final JsonGenerator gen, final SerializerProvider serializers)
|
||||
throws IOException {
|
||||
gen.writeString(value.toHexString());
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ import org.kar.archidata.db.DbIoFactory;
|
||||
import org.kar.archidata.db.DbIoMorphia;
|
||||
import org.kar.archidata.db.DbIoSql;
|
||||
import org.kar.archidata.exception.DataAccessException;
|
||||
import org.kar.archidata.tools.ContextGenericTools;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -132,7 +133,7 @@ public abstract class DBAccess implements Closeable {
|
||||
|
||||
// seems a good idea, but very dangerous if we not filter input data... if set an id it can be complicated...
|
||||
public <T> T insertWithJson(final Class<T> clazz, final String jsonData) throws Exception {
|
||||
final ObjectMapper mapper = new ObjectMapper();
|
||||
final ObjectMapper mapper = ContextGenericTools.createObjectMapper();
|
||||
// parse the object to be sure the data are valid:
|
||||
final T data = mapper.readValue(jsonData, clazz);
|
||||
return insert(data);
|
||||
@ -164,7 +165,7 @@ public abstract class DBAccess implements Closeable {
|
||||
if (options.get(Condition.class).size() == 0) {
|
||||
throw new DataAccessException("request a updateWhereWithJson without any condition");
|
||||
}
|
||||
final ObjectMapper mapper = new ObjectMapper();
|
||||
final ObjectMapper mapper = ContextGenericTools.createObjectMapper();
|
||||
// parse the object to be sure the data are valid:
|
||||
final T data = mapper.readValue(jsonData, clazz);
|
||||
// Read the tree to filter injection of data:
|
||||
|
@ -24,6 +24,7 @@ import org.kar.archidata.dataAccess.options.Limit;
|
||||
import org.kar.archidata.dataAccess.options.OrderBy;
|
||||
import org.kar.archidata.dataAccess.options.QueryOption;
|
||||
import org.kar.archidata.exception.DataAccessException;
|
||||
import org.kar.archidata.tools.ContextGenericTools;
|
||||
import org.kar.archidata.tools.DateTools;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -391,7 +392,7 @@ public class DataExport {
|
||||
}
|
||||
if (MediaType.APPLICATION_JSON.equals(accept)) {
|
||||
LOGGER.info("Start mapping josn");
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final ObjectMapper objectMapper = ContextGenericTools.createObjectMapper();
|
||||
LOGGER.info("Start find modules josn");
|
||||
objectMapper.findAndRegisterModules();
|
||||
LOGGER.info("Start map object");
|
||||
|
@ -52,7 +52,7 @@ public class AddOnDataJson implements DataAccessAddOn {
|
||||
if (data == null) {
|
||||
ps.setNull(iii.value, Types.VARCHAR);
|
||||
}
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final ObjectMapper objectMapper = ContextGenericTools.createObjectMapper();
|
||||
final String dataString = objectMapper.writeValueAsString(data);
|
||||
ps.setString(iii.value, dataString);
|
||||
iii.inc();
|
||||
@ -108,7 +108,7 @@ public class AddOnDataJson implements DataAccessAddOn {
|
||||
}
|
||||
final String jsonData = rs.getString(count.value);
|
||||
if (!rs.wasNull()) {
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final ObjectMapper objectMapper = ContextGenericTools.createObjectMapper();
|
||||
if (field.getType() == List.class) {
|
||||
final ParameterizedType listType = (ParameterizedType) field.getGenericType();
|
||||
final Class<?> listClass = (Class<?>) listType.getActualTypeArguments()[0];
|
||||
|
@ -69,7 +69,7 @@ public class AddOnDataJson implements DataAccessAddOn {
|
||||
if (data == null) {
|
||||
ps.setNull(iii.value, Types.VARCHAR);
|
||||
}
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final ObjectMapper objectMapper = ContextGenericTools.createObjectMapper();
|
||||
final String dataString = objectMapper.writeValueAsString(data);
|
||||
ps.setString(iii.value, dataString);
|
||||
iii.inc();
|
||||
@ -120,7 +120,7 @@ public class AddOnDataJson implements DataAccessAddOn {
|
||||
final String jsonData = rs.getString(count.value);
|
||||
count.inc();
|
||||
if (!rs.wasNull()) {
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final ObjectMapper objectMapper = ContextGenericTools.createObjectMapper();
|
||||
if (field.getType() == List.class) {
|
||||
final ParameterizedType listType = (ParameterizedType) field.getGenericType();
|
||||
final Class<?> listClass = (Class<?>) listType.getActualTypeArguments()[0];
|
||||
|
@ -2,6 +2,7 @@ package org.kar.archidata.tools;
|
||||
|
||||
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
|
||||
import org.glassfish.jersey.server.ResourceConfig;
|
||||
import org.kar.archidata.converter.jackson.JacksonModules;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
@ -9,20 +10,25 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
|
||||
public class ContextGenericTools {
|
||||
|
||||
public static ObjectMapper createObjectMapper() {
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
// Configure Jackson for dates and times
|
||||
objectMapper.registerModule(new JavaTimeModule()); // Module for Java 8+ Date and Time API
|
||||
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
// configure the local serialization modules
|
||||
objectMapper.registerModule(JacksonModules.getAllModules());
|
||||
return objectMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add support of Jackson jsr310 for data and time serialization and un-serialization.
|
||||
* @param rc Resource exception model.
|
||||
*/
|
||||
public static void addJsr310(final ResourceConfig rc) {
|
||||
// Configure Jackson for dates and times
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
objectMapper.registerModule(new JavaTimeModule()); // Module for Java 8+ Date and Time API
|
||||
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
|
||||
final ObjectMapper objectMapper = createObjectMapper();
|
||||
// configure jackson provider for JSON mapper
|
||||
final JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider();
|
||||
provider.setMapper(objectMapper);
|
||||
|
||||
// Record it on the Resource configuration
|
||||
rc.register(provider);
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class JWTWrapper {
|
||||
in.close();
|
||||
// print result
|
||||
LOGGER.debug(response.toString());
|
||||
final ObjectMapper mapper = new ObjectMapper();
|
||||
final ObjectMapper mapper = ContextGenericTools.createObjectMapper();
|
||||
final PublicKey values = mapper.readValue(response.toString(), PublicKey.class);
|
||||
rsaPublicJWK = RSAKey.parse(values.key);
|
||||
return;
|
||||
|
@ -17,9 +17,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParseException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
|
||||
import jakarta.ws.rs.core.HttpHeaders;
|
||||
|
||||
@ -31,11 +29,7 @@ public class RESTApi {
|
||||
|
||||
public RESTApi(final String baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
this.mapper = new ObjectMapper();
|
||||
// add by default support of LocalTime and LocalDate and LocalDateTime
|
||||
this.mapper.registerModule(new JavaTimeModule()); // Module for Java 8+ Date and Time API
|
||||
this.mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
|
||||
this.mapper = ContextGenericTools.createObjectMapper();
|
||||
}
|
||||
|
||||
public void setToken(final String token) {
|
||||
|
Loading…
Reference in New Issue
Block a user