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

com.foxinmy.weixin4j.http.message.AbstractMessageConverter Maven / Gradle / Ivy

There is a newer version: 1.10.2
Show newest version
package com.foxinmy.weixin4j.http.message;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import com.foxinmy.weixin4j.http.HttpResponse;
import com.foxinmy.weixin4j.http.MimeType;
import com.foxinmy.weixin4j.util.Consts;

public abstract class AbstractMessageConverter implements MessageConverter {

	protected Charset charset = Consts.UTF_8;

	private List supportedMimeTypes;

	protected AbstractMessageConverter() {
		this.supportedMimeTypes = Collections.emptyList();
	}

	protected AbstractMessageConverter(MimeType supportedMimeType) {
		setSupportedMediaTypes(Collections.singletonList(supportedMimeType));
	}

	protected AbstractMessageConverter(MimeType... supportedMimeTypes) {
		setSupportedMediaTypes(Arrays.asList(supportedMimeTypes));
	}

	public void setSupportedMediaTypes(List supportedMimeTypes) {
		this.supportedMimeTypes = new ArrayList(supportedMimeTypes);
	}

	public Charset getCharset() {
		return charset;
	}

	public void setCharset(Charset charset) {
		this.charset = charset;
	}

	@Override
	public List supportedMimeTypes() {
		return Collections.unmodifiableList(this.supportedMimeTypes);
	}

	@Override
	public boolean canConvert(Class clazz, HttpResponse response) {
		MimeType mimeType = MimeType.valueOf(response.getHeaders().getContentType());
		byte[] content = response.getContent();
		return supports(clazz, mimeType) || supports(clazz, content);
	}

	/**
	 * 满足其中一个supports
	 * 
	 * @param clazz
	 *            转换类型
	 * @param mimeType
	 *            媒体类型
	 * @return 支持标识
	 */
	protected boolean supports(Class clazz, MimeType mimeType) {
		if (mimeType == null) {
			return true;
		}
		for (MimeType supportedMediaType : supportedMimeTypes()) {
			if (supportedMediaType.includes(mimeType)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 满足其中一个supports
	 * 
	 * @param clazz
	 *            转换类型
	 * @param content
	 *            内容数据
	 * @return 支持标识
	 */
	protected abstract boolean supports(Class clazz, byte[] content);

	@Override
	public  T convert(Class clazz, HttpResponse response) throws IOException {
		return convertInternal(clazz, response.getBody());
	}

	protected abstract  T convertInternal(Class clazz, InputStream body) throws IOException;
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy