package com.primeton.dgs.web.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.net.HttpHeaders; import com.google.common.net.MediaType; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.io.StringReader; import java.io.Writer; import java.lang.reflect.Array; import java.util.Collection; import java.util.List; /** * * Rest 服务转换. Add:METQI-45,Http RestApi 输入输出工具类 * *
 *
 * Created by zhaopx.
 * User: zhaopx
 * Date: 2019/9/5
 * Time: 09:21
 *
 * 
* * @author zhaopx */ public class RestApiIOUtils { /** * 把 Java Bean 转为 JSON 字符串 * @param bean * @return */ public static String convertString(Object bean) { if(bean instanceof JSON) { // 如果是 JSON 对象 return ((JSON)bean).toJSONString(); } if(bean instanceof Array || bean instanceof Collection) { // 集合类型、数组类型返回 array 数组 return JSONArray.toJSONString(bean); } return JSONObject.toJSONString(bean); } /** * 把 Java Bean 转为 JSON 字符串 * @param bean * @return */ public static void output(T bean, OutputStream out) throws IOException { IOUtils.copy(new StringReader(convertString(bean)), out); } /** * 把 Java Bean 转为 JSON 字符串 * @param bean * @return */ public static void output(Object bean, Writer out) throws IOException { IOUtils.copy(new StringReader(convertString(bean)), out); } /** * 把 Java Bean 转为 JSON 字符串,并从 HttpServletResponse 输出 * @param bean * @return */ public static void output(Object bean, HttpServletResponse response) { output(bean, response, "UTF-8"); } /** * 把 Java Bean 转为 JSON 字符串,并从 HttpServletResponse 输出 * @param bean * @return */ public static void output(Object bean, HttpServletResponse response, String charset) { response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString()); response.setCharacterEncoding(charset); try { IOUtils.copy(new StringReader(convertString(bean)), response.getWriter()); } catch (IOException e) { throw new IllegalStateException(e); } } /** * 把 Rest API 中提交的 JSON 表单数据,转为 clazz 指定的 Bean 类型的 LIST 集合 * @param request HttpRestAPI * * @param clazz JSON 能转换的 Class * @return */ public static List beanArray(HttpServletRequest request, Class clazz) { String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); try { String json = StringUtils.trim(IOUtils.toString(request.getReader())); // Rest API 接口 if(json.startsWith("[") && json.endsWith("]")) { return JSONObject.parseArray(json, clazz); } throw new IllegalArgumentException("错误的数组消息实体。" + json); } catch (IOException e) { throw new IllegalStateException(e); } } /** * 把 Rest API 中提交的 JSON 表单数据,转为 clazz 指定的 Bean 类型 * @param request HttpRestAPI * @param clazz JSON 能转换的 Class * @return */ public static T beanObject(HttpServletRequest request, Class clazz) { String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); try { String json = StringUtils.trim(IOUtils.toString(request.getReader())); // Rest API 接口 if(json.startsWith("{") && json.endsWith("}")) { return JSONObject.parseObject(json, clazz); } throw new IllegalArgumentException("错误的消息对象实体。" + json); } catch (IOException e) { throw new IllegalStateException(e); } } /** * 把 Rest API 中提交的 JSON 表单数据,转为 JSON 类型 * @param request HttpRestAPI * @return */ public static JSON jsonObject(HttpServletRequest request) { String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); try { String json = StringUtils.trim(IOUtils.toString(request.getReader())); // Rest API 接口 if(json.startsWith("{") && json.endsWith("}")) { return JSONObject.parseObject(json); } else if(json.startsWith("[") && json.endsWith("]")) { return JSON.parseArray(json); } throw new IllegalArgumentException("错误的消息对象实体。" + json); } catch (IOException e) { throw new IllegalStateException(e); } } }