
com.jianggujin.http.response.JAbstractResponse Maven / Gradle / Ivy
The newest version!
/**
* Copyright 2018 jianggujin (www.jianggujin.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jianggujin.http.response;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import com.jianggujin.http.core.JHttpException;
import com.jianggujin.http.core.JRequest;
import com.jianggujin.http.core.JResponse;
import com.jianggujin.http.util.JDataUtils;
/**
* 响应处理抽象类
*
* @author jianggujin
*
*/
public abstract class JAbstractResponse implements JResponse {
protected int responseCode;
protected String responseMessage;
protected Map> headers;
protected boolean isError;
protected Object data;
protected Object error;
public void onComplete(InputStream inputStream, HttpURLConnection conn, JRequest request) throws JHttpException {
try {
this.responseCode = conn.getResponseCode();
this.responseMessage = conn.getResponseMessage();
this.headers = conn.getHeaderFields();
this.responseCode = conn.getResponseCode();
this.isError = responseCode < 200 || responseCode >= 300;
boolean isGZIP = "gzip".equalsIgnoreCase(this.getHeader("Content-Encoding"));
if (this.isError) {
this.error = JDataUtils.readToString(isGZIP ? new GZIPInputStream(inputStream) : inputStream,
JDataUtils.getCharsetFromContentType(this.getHeader("Content-Type")));
if (!request.ignoreError())
throw new IOException("the http response status[" + responseCode + "] is not OK.");
} else if (inputStream != null) {
dealData(isGZIP ? new GZIPInputStream(inputStream) : inputStream);
}
} catch (Exception e) {
throw new JHttpException(e);
}
}
/**
* 处理数据,子类应该重写该方法
*
* @throws IOException
* @throws JHttpException
*/
protected abstract void dealData(InputStream stream) throws IOException, JHttpException;
/**
* 获得响应吗
*
* @return responseCode
*/
public int getResponseCode() {
return responseCode;
}
/**
* 获得响应消息
*
* @return responseMessage
*/
public String getResponseMessage() {
return responseMessage;
}
/**
* 获得响应头
*
* @return headers
*/
public Map> getHeaders() {
return headers;
}
/**
* 获得响应头
*/
public String getHeader(String name) {
List headers = this.headers.get(name);
if (headers != null && !headers.isEmpty())
return headers.get(0);
return null;
}
/**
* 是否错误
*
* @return isError
*/
public boolean isError() {
return isError;
}
/**
* 获得数据
*
* @return data
*/
public Object getData() {
return data;
}
public Object getError() {
return error;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy