Java自带的Http Server实现设置返回值的类型(content-type)
小楼夜听雨QAQ 人气:0Http Server如何设置返回值的类型(content-type)
以返回Json格式的数据为例
首先我们要自己写一个请求的处理器,需要实现HttpHandler接口,并重写handle方法。
handle方法会获得一个HttpExchange,通过exchange可以设置返回值内容与长度
private void response(HttpExchange exchange, String jsonBody) { try { byte[] bytes = jsonBody.getBytes(StandardCharsets.UTF_8); exchange.getResponseHeaders().add("Content-Type", "application/json; charset=utf-8"); exchange.sendResponseHeaders(200, bytes.length); OutputStream outputStream = exchange.getResponseBody(); outputStream.write(jsonBody.getBytes(StandardCharsets.UTF_8)); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
注意两条语句的顺序:
设置请求头的语句一定要放在sendResponseHeaders前面!
sendResponse主要作用是发送响应头给客户端,发送后再设置响应头会被忽略掉。
也就是说响应头和响应体是分开发送的。这个可以通过debug验证,如下:
断点打在这里,用postman发起请求
postman显示发送状态
继续向下执行,设置请求头,依然是上述状态。
直到执行完sendResponseHeaders,postman虽然还在等待数据,但是响应头已经接收到了:
响应头
response body
执行到最后,发送完响应体后,截图如下:
最后结果
由此可见响应头与响应体是分开发送的。
获取http接口返回值
/** *description:获取http接口返回值 有参数 * 返回值为 jsonarray 字符串形式 *@author: fuxb *@date: 2021/7/28 11:00 @param path http 接口地址 @param post 参数 形式为 param1=value1¶m2=value2 *@return: com.google.gson.JsonObject */ public static String postDownloadJson(String path,String post){ URL url = null; try { url = new URL(path); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST");// 提交模式 // conn.setConnectTimeout(10000);//连接超时 单位毫秒 // conn.setReadTimeout(2000);//读取超时 单位毫秒 // 发送POST请求必须设置如下两行 httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); // 获取URLConnection对象对应的输出流 解决java.io.IOException: Server returned HTTP response code: 500 问题,使用OutputStreamWriter 转 utf-8格式,参数不能有空格的问题 // PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream()); OutputStreamWriter printWriter = new OutputStreamWriter(httpURLConnection.getOutputStream(), "utf-8"); // 发送请求参数 java.net.URLEncoder.encode(post, "UTF-8"); printWriter.write(post);//post的参数 xx=xx&yy=yy // flush输出流的缓冲 printWriter.flush(); //开始获取数据 BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream()); ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len; byte[] arr = new byte[1024]; while((len=bis.read(arr))!= -1){ bos.write(arr,0,len); bos.flush(); } bos.close(); // return (JsonObject)parse.parse(bos.toString("utf-8")); return bos.toString("utf-8"); } catch (Exception e) { e.printStackTrace(); } return null; }
//返回的json数组字符串转list<bean>: List<ResKPID> listKpid = JSONObject.parseArray(listStrKpid, ResKPID.class);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容