JsonJacksonDeserializer.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.utils.serialization;
- import java.io.InputStream;
- import java.io.Reader;
- import java.util.ArrayList;
- import java.util.List;
- import com.fasterxml.jackson.databind.BeanDescription;
- import com.fasterxml.jackson.databind.DeserializationConfig;
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder;
- import com.fasterxml.jackson.databind.deser.BeanDeserializerFactory;
- import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
- import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext;
- import com.fasterxml.jackson.databind.deser.DeserializerFactory;
- import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
- /**
- * Contiene utility per effettuare la de-serializzazione di un oggetto
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class JsonJacksonDeserializer implements IDeserializer{
-
- private static class BeanDeserializerModifierForIgnorables extends BeanDeserializerModifier {
- private static final long serialVersionUID = 1L;
- private List<String> ignorables;
- public BeanDeserializerModifierForIgnorables(List<String> properties) {
- if(properties!=null)
- this.ignorables = properties;
- else
- this.ignorables = new ArrayList<>();
- }
- @Override
- public BeanDeserializerBuilder updateBuilder(
- DeserializationConfig config, BeanDescription beanDesc,
- BeanDeserializerBuilder builder) {
- for(String ignorable : this.ignorables) {
- builder.addIgnorable(ignorable);
- }
- return builder;
- }
- @Override
- public List<BeanPropertyDefinition> updateProperties(
- DeserializationConfig config, BeanDescription beanDesc,
- List<BeanPropertyDefinition> propDefs) {
- List<BeanPropertyDefinition> newPropDefs = new ArrayList<>();
- for(BeanPropertyDefinition propDef : propDefs) {
- if(!this.ignorables.contains(propDef.getName())) {
- newPropDefs.add(propDef);
- }
- }
- return newPropDefs;
- }
- }
- private ObjectMapper mapper;
- public JsonJacksonDeserializer() {
- this(new SerializationConfig());
- }
- public JsonJacksonDeserializer(SerializationConfig config) {
- BeanDeserializerModifier modifier = new BeanDeserializerModifierForIgnorables(config.getExcludes());
- DeserializerFactory dFactory = BeanDeserializerFactory.instance.withDeserializerModifier(modifier);
- this.mapper = new ObjectMapper(null, null, new DefaultDeserializationContext.Impl(dFactory));
- this.mapper.setDateFormat(config.getDf());
- if(config.isSerializeEnumAsString())
- this.mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
- }
- @Override
- public Object getObject(String s, Class<?> classType) throws IOException{
- try {
- return this.mapper.readValue(s, classType);
- } catch (java.io.IOException e) {
- throw new IOException(e);
- }
- }
- @Override
- public Object readObject(InputStream is, Class<?> classType) throws IOException {
- try {
- return this.mapper.readValue(is, classType);
- } catch (java.io.IOException e) {
- throw new IOException(e);
- }
- }
- @Override
- public Object readObject(Reader reader, Class<?> classType) throws IOException {
- try {
- return this.mapper.readValue(reader, classType);
- } catch (java.io.IOException e) {
- throw new IOException(e);
- }
- }
- }