2014-10-19 3 views
2

Возможно ли передать пользовательский объект от клиента к серверу, используя проект Tyrus для связи через websocket. Я хочу создать простое настольное приложение с помощью JavaFX. Как я могу передавать данные, которые я собираю на стороне клиента (например, Object Person с полями name и lastname), поэтому я могу сохранить эти данные в базе данных (на моей логике сервера)?Tyrus - передать объект от клиента к серверу

ответ

0

Возможно, и форма переданных данных является полностью вашим выбором.

WebSocket может передавать текстовые или двоичные данные, вот и все. Вы можете сериализовать свой obect до ObjectStream и отправить данные в виде двоичного потока, или вы можете использовать JAXB для данных маршалла и umarshall в/из XML или JSON-P для JSON (обратите внимание, что есть много других возможностей, таких как GSON, Jackson, ...).

Если бы я был на вашем месте, я бы использовал JSON с любой библиотекой, которую я нашел применимой - таким образом, когда вы расширите область приложения до javascript-клиентов, вы сможете повторно использовать (надеюсь) все ,

+2

Сейчас я понимаю. Есть ли какой-то простой учебник для этого, поэтому я вижу его в коде. Спасибо. – Sysrq147

+0

@ Sysrq147 привет вы нашли образец кода? я также имею такое же требование – Jeevanantham

+0

@ jerith2 К сожалению, нет. :/ – Sysrq147

0

В дополнение к Павел Buček объяснения, примеры кода здесь

Base64 для преобразования

import java.util.Base64; 

Serverendpoint

ArrayList listobj=new ArrayList(); 
listobj.add("data1"); 
listobj.add("data2"); 
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); 
objectOutputStream.writeObject(listobj);      
String str = Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()); 
session.getBasicRemote().sendText(str); 

Client (Tyrus)

@OnMessage 
public void onMessage(Session session, final String message) throws IOException { 
    try { 
     byte data[] = Base64.getDecoder().decode(message); 
     bis = new ByteArrayInputStream(data); 
     ois = new ObjectInputStream(bis); 
     ArrayList list= (ArrayList) ois.readObject(); 
     for (int i = 0; i < list.size(); i++) { 
      System.out.println(list.get(i)); 
     }  
    } catch (Exception e) { 
     System.out.println("error : " + e.getMessage()); 
    } finally { 
     if (bis != null) { 
      bis.close(); 
     } 
     if (ois != null) { 
      ois.close(); 
     } 
    } 
} 
Смежные вопросы