JAVA HTTP POST参数为一个对象或数组

a

问题描述

最近接到一个很简单的问题,对方提供了一个接口,让我每隔一段时间像他的接口推送一些数据,因为数据量比较大,所以这种Http 请求类型肯定是Post请求。这种推送过去的参数是一个很大的数组,而且数据字段比较多,所以用key=value 这种形式传过去就不太适合了,应该直接将这种数组加入Http的body体中,一次性传过去,接收放也不需要一个一个字段解析,全部取出body体中数据,再解析就可以了。
假设传递参数为

服务端实现

新建一个serlvet3.0 处理Post 请求

客户端调用实现

测试结果

服务端输出结果
服务端结果
客户端输出结果
这里写图片描述


各位大神好,本人非专业程序员,业余时间自学java遇到如下问题: 在学习编写服务器的过程中,尝试使用字节数组POST方式的HTTP请求进行读取。 尝试了两个方法: 1. 直接使用.available()方法获得请求输入流的长度,并定义对应大小的字节数组,程序能够正常运行并输出请求 2. 将字节数组大小固定为10,使用while循环读取,此时程序是没有输出的。 于是在while循环中增加了输出每个循环读取内容到控制台,发现在读取到请求正文末尾时,while循环未跳出,也不继续执行循环体,如果此时关闭网页则可以结束循环,问题可能比较基础,还望大神们能够帮忙解惑,谢谢! 为了把问题说明的更清楚,这里加了个动图: ![图片说明](https://img-ask.csdn.net/upload/201703/16/1489633260_561168.gif) ``` java public class Server { private ServerSocket server; /** * 开启服务器 */ public void start() { try { // 新建服务器后等待客户端连接 // 对应访问地址为:http://localhost:8888/ server = new ServerSocket(8888); acceptClient(); } catch (IOException e) { e.printStackTrace(); } } /** * 连接客户端 */ private void acceptClient() { try { // 等待客户端连接 Socket client = server.accept(); // 选择字节输入流进行读取 BufferedInputStream bis = new BufferedInputStream( client.getInputStream() ); // // 获取输入流字节的长度并创建对应的字节数组 // byte[] buffer = new byte[bis.available()]; // for (int i = 0; i < buffer.length; i ++){ // buffer[i] = (byte)bis.read(); // } // // 去除请求中的空格,方便后续使用 // String request = new String(buffer,0,buffer.length).trim(); // 获取输入流字节的长度并创建对应的字节数组 StringBuilder sb = new StringBuilder(); byte[] buffer = new byte[10]; int len = 0; while ((len = bis.read(buffer))!=-1){ String tmp = new String(buffer, 0, len); System.out.println(tmp); sb.append(tmp); } // 去除请求中的空格,方便后续使用 String request = sb.toString().trim(); System.out.println(request); } catch (IOException e) { e.printStackTrace(); } } /** * 关闭服务器 */ public void stop(){ try { server.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Server server = new Server(); server.start(); } } ```
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页