All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.onetwo.common.apiclient.convertor.ApiclientJackson2XmlMessageConverter Maven / Gradle / Ivy

package org.onetwo.common.apiclient.convertor;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.collections4.CollectionUtils;
import org.onetwo.common.jackson.JacksonXmlMapper;
import org.onetwo.common.utils.LangUtils;
import org.springframework.http.MediaType;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;

import com.google.common.collect.Sets;

/**
 * @author wayshall
 * 
*/ public class ApiclientJackson2XmlMessageConverter extends MappingJackson2XmlHttpMessageConverter { private SupportedMediaTypeExtractor supportedMediaTypes = new SupportedMediaTypeExtractor(); private Set supportedMediaTypeSet = Sets.newHashSet(); public ApiclientJackson2XmlMessageConverter() { super(JacksonXmlMapper.ignoreNull().getObjectMapper()); setSupportedMediaTypes(Arrays.asList( MediaType.APPLICATION_XML // MediaType.TEXT_PLAIN//for wechat api )); } public void setSupportedMediaTypes(List supportedMediaTypes) { super.setSupportedMediaTypes(supportedMediaTypes); supportedMediaTypeSet = new HashSet(supportedMediaTypes); } @Override public boolean canRead(Class clazz, MediaType mediaType) { return this.canRead(clazz, null, mediaType); } @Override public boolean canRead(Type type, Class contextClass, MediaType mediaType) { List produces = this.supportedMediaTypes.getProduceMediaTypes(); if (!produces.isEmpty()) { return CollectionUtils.containsAny(produces, super.getSupportedMediaTypes()); } if (mediaType != null) { List mediaTypes = getMediaTypes(type); if(LangUtils.isNotEmpty(mediaTypes)){ return mediaTypes.contains(mediaType); } } // xml必须要显式加注解声明,否则返回false // return super.canRead(type, contextClass, mediaType); return false; } @Override public boolean canWrite(Class clazz, MediaType mediaType) { List consumes = this.supportedMediaTypes.getConsumeMediaTypes(); if (!consumes.isEmpty()) { return CollectionUtils.containsAny(consumes, super.getSupportedMediaTypes()); } if(mediaType!=null){ List mediaTypes = getMediaTypes(clazz); if(LangUtils.isNotEmpty(mediaTypes)){ return mediaTypes.contains(mediaType); } } // xml必须要显式加注解声明,否则返回false // return super.canWrite(clazz, mediaType); return false; } protected List getMediaTypes(Type clazz){ List mediaTypes = supportedMediaTypes.getMediaTypes(clazz); addMediaTypeIfNotExists(mediaTypes); return mediaTypes; } private void addMediaTypeIfNotExists(List mediaTypes){ if(mediaTypes==null || mediaTypes.isEmpty()){ return ; } for(MediaType mediaType : mediaTypes){ if(!supportedMediaTypeSet.contains(mediaType)){ supportedMediaTypeSet.add(mediaType); } } } @Override public List getSupportedMediaTypes() { return Collections.unmodifiableList(new ArrayList(supportedMediaTypeSet)); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy