我的需求是:在客户端传递一个对象到服务器,服务端根据发送过来的对象的一个属性的内容决定对这个对象进行对应的处理。现在碰到的问题是:1.我在服务器端用readObject方法反序列化获得对象的类型时Object,服务器如何知道该对象是什么类型并向下转型去获得该对象的属性值(我知道反射可以获得对象的类名,但是无法根据得到的类名进行向下转型((user.getClass()) object).reg()这句出现了编译错误)。2.我传过来的对象是各式各样的,方法名可以在对象参数中带(解决第一个问题就可以获得方法名);但是在反射时我需要知道方法的参数类型和个数才能获得方法,这样的话我无法用一个服务器端方法就能解决所有客户端的要求。3.服务端只有一个socket监听,我如果在一个socket写一个类的对应方法的操作,我如何通过这个socket去调用服务器的其他的类和方法? 恳请解答,感激不尽!
在客户端传递一个对象到服务器,如果通过socket,都是序列化成字节流,因为网络传输,全当做字符串传输,是不需要理解具体语义的。服务端根据发送过来的对象的一个属性的内容决定对这个对象进行对应的处理,那就一次传一个集合过来,服务器从集合中取
可以考虑使用fastJson作为序列化和反序列化工具
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.22</version>
</dependency>
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) throws Exception {
Student student = new Student();
student.setName("ss");
//序列化
String ss = JSON.toJSONString(student);
反序列化
Student std = JSON.parseObject(ss, Student.class);
System.out.println(std.getName());
}