У меня есть некоторые классы моделей, такие как Customer
, Product
и т.д. В моем проекте, которые имеют несколько полей и их методы setter-getter, мне нужно обмениваться объектами этих классов как JSONObject через Sockets, чтобы и от клиента и от сервера.
Можно ли как-нибудь создать JSONObject
непосредственно из объекта класса модели, чтобы поля объекта становились ключами, а значения этого объекта класса модели становились значениями для этого JSONObject.
Пример:
Customer c = new Customer();
c.setName("Foo Bar");
c.setCity("Atlantis");
.....
/* More such setters and corresponding getters when I need the values */
.....
И я создаю JSON Object как:
JSONObject jsonc = new JSONObject(c); //I'll use this only once I'm done setting all values.
Что заставляет меня что-то вроде:
{"name":"Foo Bar","city":"Atlantis"...}
Обратите внимание, что в некоторых моих модельных классах некоторые свойства сами являются объектом другого модельного класса. Например:
Product p = new Product();
p.setName("FooBar Cookies");
p.setProductType("Food");
c.setBoughtProduct(p);
В случае, подобном описанному выше, как я и ожидал, полученным объектом JSON будет:
{"name":"Foo Bar","city":"Atlantis","bought":{"productname":"FooBar Cookies","producttype":"food"}}
Я знаю, что мог бы создать что-то вроде toJSONString()
в каждом классе модели, а затем создать JSON-дружественную строку и манипулировать ею, но в моем предыдущем опыте создания службы RESTful в Java (что совершенно не соответствует этой теме) вопрос), я мог бы вернуть строку JSON из метода сервиса, используя @Produces(MediaType.APPLICATION_JSON)
, и иметь метод, возвращающий объект класса модели. Таким образом, он генерировал строку JSON, которую я мог использовать на стороне клиента.
Мне было интересно, возможно ли получить подобное поведение в текущем сценарии.