com.foxinmy.weixin4j.http.message.AbstractMessageConverter Maven / Gradle / Ivy
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 extends T> clazz, HttpResponse response) throws IOException {
return convertInternal(clazz, response.getBody());
}
protected abstract T convertInternal(Class extends T> clazz, InputStream body) throws IOException;
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy