2012-04-14 124 views
3

我想從服務器發送一個對象到客戶端。如何從HttpResponse獲取對象?

客戶端:

HttpResponse response = client.execute(request); 

服務器端:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException 
{ 
    PrintWriter out = response.getWriter(); 
    out.print(new Object()); 
} 

如何得到響應的對象?
我是否需要改用:

OutputStream out = response.getOutputStream(); 

如果是哪種方式更有效?
示例代碼請:)
謝謝。

回答

4

你不能發送Object.toString(),因爲它不包含有關該對象的所有信息。 序列化可能是你需要的。看看那個:http://java.sun.com/developer/technicalArticles/Programming/serialization/
你想發送的對象必須實現Serializable。 在您的服務器就可以使用這樣的事情:

OutputStream out = response.getOutputStream(); 
oos = new ObjectOutputStream(out); 
oos.writeObject(yourSerializableObject); 

在客戶端,你這樣做:

in = new ObjectInputStream(response.getEntity().getContent()); //Android 
in = new ObjectInputStream(response.getInputStream()); //Java 
ObjcetClass obj = (ObjectClass)in.readObject(); 
+1

或者,您可以使用序列化JSON,有幾個項目,如傑克遜的http:// jackson.codehaus.org/,可以很容易地序列化對象的Gson。跨平臺且易於調試。 – j13r 2012-04-14 15:07:08

+0

我認爲,因爲out.print()得到的對象它真的發送一個,但現在我知道更好,謝謝。關於上面的代碼我猜你的意思是: OutputStream out = response.getOutputStream();而不是: PrintWriter out = response.getWriter(); 和HttpResponse沒有getOutputStream() 所以我的問題仍然是 – Rami 2012-04-14 15:25:35

+0

哦,是的,我的意思是。對於響應,我認爲你必須使用'response.getInputStream()' – AntonS 2012-04-14 15:32:32