JsonJacksonSerializer.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.OutputStream;
- import java.io.Writer;
- import java.util.HashSet;
- import com.fasterxml.jackson.annotation.JsonInclude.Include;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.ObjectWriter;
- import com.fasterxml.jackson.databind.SerializationFeature;
- import com.fasterxml.jackson.databind.introspect.Annotated;
- import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
- import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
- import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
- import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
- import com.fasterxml.jackson.databind.type.TypeFactory;
- import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
- /**
- * Contiene utility per effettuare la serializzazione di un oggetto
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class JsonJacksonSerializer implements ISerializer {
- private static final String DEFAULT = "__default";
- private ObjectWriter writer;
-
- public JsonJacksonSerializer() {
- this(new SerializationConfig());
- }
-
- public JsonJacksonSerializer(SerializationConfig config) {
- ObjectMapper mapper = new ObjectMapper().setAnnotationIntrospector(
- new AnnotationIntrospectorPair(
- new JacksonAnnotationIntrospector() {
- private static final long serialVersionUID = 1L;
- @Override
- public String findFilterId(Annotated a) {
- return DEFAULT;
- }
- }, new JaxbAnnotationIntrospector(TypeFactory.defaultInstance())
- )
- );
- if(config.isSerializeEnumAsString())
- mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
- mapper.setDateFormat(config.getDf());
-
- if(config.getIgnoreNullValues() == null || config.getIgnoreNullValues())
- mapper.setSerializationInclusion(Include.NON_NULL);
-
- SimpleFilterProvider filters = new SimpleFilterProvider();
- if( (
- config.getFilter() != null
- &&
- ( (config.getFilter().sizeFiltersByName()>0) || (config.getFilter().sizeFiltersByValue()>0))
- )
- ||
- config.getExcludes() != null) {
- filters = filters.addFilter(DEFAULT, new JacksonSimpleBeanPropertyFilter(config, new JsonJacksonSerializer()));
- } else if(config.getIncludes()!=null) {
- HashSet<String> hashSet = new HashSet<String>();
- hashSet.addAll(config.getIncludes());
- filters = filters.addFilter(DEFAULT, SimpleBeanPropertyFilter.filterOutAllExcept(hashSet));
- }
-
- filters = filters.setFailOnUnknownId(false);
- mapper.setFilterProvider(filters);
- if(config.isPrettyPrint()) {
- this.writer = mapper.writer().withDefaultPrettyPrinter();
- }
- else {
- this.writer = mapper.writer();
- }
- }
- @Override
- public String getObject(Object o) throws IOException{
- try{
- return this.writer.writeValueAsString(o);
- }catch(Exception e){
- throw new IOException(e.getMessage(),e);
- }
- }
- @Override
- public void writeObject(Object o,OutputStream out) throws IOException{
- try{
- this.writer.writeValue(out, o);
- }catch(Exception e){
- throw new IOException(e.getMessage(),e);
- }
- }
- @Override
- public void writeObject(Object o,Writer out) throws IOException{
- try{
- this.writer.writeValue(out, o);
- }catch(Exception e){
- throw new IOException(e.getMessage(),e);
- }
- }
- }