Java 使用URLConnection发送和检索映射

Java 使用URLConnection发送和检索映射,java,Java,我想将HashMap从Swing应用程序发送到Web应用程序。HashMap类型为。它包含一个字符串、ArrayList和字节数组。我想在web应用程序中检索此地图 回转侧代码: private static void sendMap() { System.out.println("Sending MAP"); byte[] bytes=getByteArray(); ArrayList<String> list =new Ar

我想将HashMap从Swing应用程序发送到Web应用程序。HashMap类型为。它包含一个字符串、ArrayList和字节数组。我想在web应用程序中检索此地图

回转侧代码:

private static void sendMap()
    {
        System.out.println("Sending MAP");
        byte[] bytes=getByteArray();
        ArrayList<String> list =new ArrayList<String>();
        list.add("ABC");
        list.add("XYZ");
        list.add("ABXY");
        Map<String, Object> params=new HashMap<String, Object>();
        params.put("Type", "Document");
        params.put("bytes", bytes);
        params.put("PartyNameList", list);

        try {
            URL url=  new URL(iinkiturl+"/getMap?id=1234567");
            URLConnection uc = url.openConnection();
            uc.setDoOutput(true);
            uc.setDoInput(true);
            uc.setAllowUserInteraction(false);

            DataOutputStream dstream = new DataOutputStream(uc.getOutputStream());

            // The POST line
            System.out.println(toByteArray(params));
            dstream.write(params.toString().getBytes());
            dstream.close();

             InputStream in = uc.getInputStream();
            int x;
            while ((x = in.read()) != -1) {
                System.out.write(x);
            }
            in.close();

            BufferedReader r = new BufferedReader(new InputStreamReader(in));
            StringBuffer buf = new StringBuffer();
            String line;
            while ((line = r.readLine()) != null) {
                buf.append(line);
            }


        } catch(Exception exception)
        {
            exception.printStackTrace();
        }


    }
private static void sendMap()
    {
        System.out.println("Sending MAP");
        ArrayList<String> list =new ArrayList<String>();
        list.add("ABC");
        list.add("XYZ");
        list.add("ABXY");
        Map<String, Object> params=new HashMap<String, Object>();
        params.put("Type", "Document");
        params.put("bytes", getByteArray());
        params.put("NameList", list);

        try {
            URL url=  new URL(iinkiturl+"/getMap?id=1234567");
            URLConnection uc = url.openConnection();
            uc.setDoOutput(true);
            uc.setDoInput(true);
            uc.setAllowUserInteraction(false);

            DataOutputStream dstream = new DataOutputStream(uc.getOutputStream());

            dstream.write(new com.google.gson.Gson().toJson(params).getBytes());
            dstream.close();

             InputStream in = uc.getInputStream();
            int x;
            while ((x = in.read()) != -1) {
                System.out.write(x);
            }
            in.close();

            BufferedReader r = new BufferedReader(new InputStreamReader(in));
            StringBuffer buf = new StringBuffer();
            String line;
            while ((line = r.readLine()) != null) {
                buf.append(line);
            }


        } catch(Exception exception)
        {
            exception.printStackTrace();
        }


    }
输出:

缓冲区==={Type=归档,PartyNameList=[ABC,XYZ,ABXY],字节=[B@24c0f1ec}


如何从该缓冲区获取映射对象。或者是否有其他解决方案来实现此目的。请提前感谢。

您正在使用的只是
toString()
方法。无法从该方法进行反序列化。 使用JSON或Java序列化工具将映射移动到可转移状态(视图)。在客户端使用相同的工具对其进行反序列化。

使用
toString()
在您的例子中,生成HashMap的字符串表示并通过网络发送它,而不是实际的
HashMap
,这就是为什么您在Web应用程序端看到该表示

您应该使用
ObjectOutputStream/ObjectInputStream
类来发送/接收您的HashMap

ObjectOutputStream/ObjectInputStream
专门负责通过网络发送对象

但是,这要求您要通过网络发送的所有对象
网络(此过程称为序列化)必须实现可序列化接口,该接口是一个标记接口。

我的问题使用JSON解决

回转侧代码:

private static void sendMap()
    {
        System.out.println("Sending MAP");
        byte[] bytes=getByteArray();
        ArrayList<String> list =new ArrayList<String>();
        list.add("ABC");
        list.add("XYZ");
        list.add("ABXY");
        Map<String, Object> params=new HashMap<String, Object>();
        params.put("Type", "Document");
        params.put("bytes", bytes);
        params.put("PartyNameList", list);

        try {
            URL url=  new URL(iinkiturl+"/getMap?id=1234567");
            URLConnection uc = url.openConnection();
            uc.setDoOutput(true);
            uc.setDoInput(true);
            uc.setAllowUserInteraction(false);

            DataOutputStream dstream = new DataOutputStream(uc.getOutputStream());

            // The POST line
            System.out.println(toByteArray(params));
            dstream.write(params.toString().getBytes());
            dstream.close();

             InputStream in = uc.getInputStream();
            int x;
            while ((x = in.read()) != -1) {
                System.out.write(x);
            }
            in.close();

            BufferedReader r = new BufferedReader(new InputStreamReader(in));
            StringBuffer buf = new StringBuffer();
            String line;
            while ((line = r.readLine()) != null) {
                buf.append(line);
            }


        } catch(Exception exception)
        {
            exception.printStackTrace();
        }


    }
private static void sendMap()
    {
        System.out.println("Sending MAP");
        ArrayList<String> list =new ArrayList<String>();
        list.add("ABC");
        list.add("XYZ");
        list.add("ABXY");
        Map<String, Object> params=new HashMap<String, Object>();
        params.put("Type", "Document");
        params.put("bytes", getByteArray());
        params.put("NameList", list);

        try {
            URL url=  new URL(iinkiturl+"/getMap?id=1234567");
            URLConnection uc = url.openConnection();
            uc.setDoOutput(true);
            uc.setDoInput(true);
            uc.setAllowUserInteraction(false);

            DataOutputStream dstream = new DataOutputStream(uc.getOutputStream());

            dstream.write(new com.google.gson.Gson().toJson(params).getBytes());
            dstream.close();

             InputStream in = uc.getInputStream();
            int x;
            while ((x = in.read()) != -1) {
                System.out.write(x);
            }
            in.close();

            BufferedReader r = new BufferedReader(new InputStreamReader(in));
            StringBuffer buf = new StringBuffer();
            String line;
            while ((line = r.readLine()) != null) {
                buf.append(line);
            }


        } catch(Exception exception)
        {
            exception.printStackTrace();
        }


    }
private static void sendMap()
{
System.out.println(“发送地图”);
ArrayList=新建ArrayList();
列表。添加(“ABC”);
列表。添加(“XYZ”);
列表。添加(“ABXY”);
Map params=新的HashMap();
参数put(“类型”、“文件”);
参数put(“字节”,getByteArray());
参数put(“名称列表”,列表);
试一试{
URL=新URL(iLinkitUrl+“/getMap?id=1234567”);
URLConnection uc=url.openConnection();
uc.设置输出(真);
uc.setDoInput(真);
uc.setAllowUserInteraction(假);
DataOutputStream数据流=新的DataOutputStream(uc.getOutputStream());
write(新的com.google.gson.gson().toJson(params.getBytes());
dstream.close();
InputStream in=uc.getInputStream();
int x;
而((x=in.read())!=-1){
系统输出写入(x);
}
in.close();
BufferedReader r=新的BufferedReader(新的InputStreamReader(in));
StringBuffer buf=新的StringBuffer();
弦线;
而((line=r.readLine())!=null){
buf.追加(行);
}
}捕获(异常)
{
异常。printStackTrace();
}
}
Web应用程序端:

        InputStream in = request.getInputStream();
        BufferedReader r = new BufferedReader(new InputStreamReader(in));
        StringBuffer buf = new StringBuffer();
        String line;
        while ((line = r.readLine())!=null) {
        buf.append(line);
        } 
        System.out.println("Buffer ======= "+buf.toString());
InputStream in = request.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(in));
StringBuffer buf = new StringBuffer();
String line;
while ((line = r.readLine())!=null) {
  buf.append(line);
} 


Map<String,Object> map=convertJsonToMap(buf.toString());

private Map<String, Object> convertJsonToMap(String json) {

        Map<String, Object> map = new HashMap<String, Object>();
        ObjectMapper mapper = new ObjectMapper();
        try {

            // convert JSON string to Map
            map = mapper.readValue(json,new TypeReference<HashMap<String, Object>>() {});

        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
InputStream in=request.getInputStream();
BufferedReader r=新的BufferedReader(新的InputStreamReader(in));
StringBuffer buf=新的StringBuffer();
弦线;
而((line=r.readLine())!=null){
buf.追加(行);
} 
Map Map=convertJsonToMap(buf.toString());
私有映射转换JSONTOMAP(字符串json){
Map Map=newhashmap();
ObjectMapper mapper=新的ObjectMapper();
试一试{
//将JSON字符串转换为映射
map=mapper.readValue(json,newTypeReference(){});
}捕获(例外e){
e、 printStackTrace();
}
返回图;
}

查看XML或JSON符号,以及在Java中生成和使用它们的API…使用Arrays.toString修复字节数组通常项目会在某些框架上增长。几乎所有项目都有编码/解码参数的概念。任何东西都可以反序列化(如果字节数组打印正确),它只需要一个自定义parser@cricket_007我不这么认为。只有真正序列化的对象才能被反序列化。
任何东西都不能被反序列化。格式一致的字符串可以被反序列化;@cricket_007
格式一致的字符串已经被真正序列化:)我想我的意思是说刚刚被解析,然后