users@jersey.java.net

Re: application/json programming model

From: Jakub Podlesak <Jakub.Podlesak_at_Sun.COM>
Date: Fri, 31 Aug 2007 08:50:08 +0200

See comments in line...

On Thu, Aug 30, 2007 at 04:32:07PM -0400, Marc Hadley wrote:
> What you propose would certainly be possible. You'd have to write a
> custom EntityProvider that will serialize and deserialize instances
> of classes with those annotations.
+1

Beside this I think JSON should be used for lightweight data structures.
Then it should be ok to work directly in the low-level space.
In your case I suggest to convey directly the original array.

Then you can think about something like:

@HttpMethod("GET")
@ProduceMime("application/json")
public JSONArray getMessage() throws JSONException {

  return new JSONArray(states);
}

>
> Have you looked at the JSON support in the JAXB entity provider that
> Jakub added ? Take a look at the Bookmark example that shows it in

The Bookmark sample uses directly JSON providers, no JAXB involved.
I will publish a blog entry today with a sample showing generation of JSON
out of JAXB object.

~Jakub

> use. You might not be able to get the exact JSON format you show
> below but I'd bet you could get close just using some of the JAXB
> annotations.
>
> Marc.
>
> On Aug 30, 2007, at 2:33 PM, Arun Gupta wrote:
>
> >In order to return a JSON array like:
> >
> >[{"name":"California","value":"California"},{"name":"New
> >York","value":"New York"},{"name":"Alabama" ,"value":"Alabama"},
> >{"name":"Texas","value":"Texas"}]
> >
> >I have to write the following code:
> >
> >-- cut here --
> > @HttpMethod("GET")
> > @ProduceMime("application/json")
> > public JSONArray getMessage() throws JSONException {
> > String[] states = { "California", "New York", "Alabama",
> >"Texas"};
> > JSONArray array = new JSONArray();
> > for (String s : states) {
> > JSONObject item = new JSONObject();
> > item.put("name", s).put("value", s);
> > array.put(item);
> > }
> >
> > return array;
> > }
> >-- cut here --
> >
> >I think this is too involving and low-level. Can the code be
> >something like the following ?
> >
> >-- cut here --
> >@JSONObject
> >ItemBean {
> > ItemBean(String name, String value) { ... }
> >
> > @JSONObjectKey
> > public String getName() { ... }
> >
> > @JSONObjectValue("value")
> > public String getNameValue() { ... }
> >}
> >
> > @HttpMethod("GET")
> > @ProduceMime("application/json")
> > public List<ItemBean> getMessage() {
> > String[] states = { "California", "New York", "Alabama",
> >"Texas"};
> > List<ItemBean> list = new ArrayList<ItemBean>();
> > for (String s : states) {
> > ItemBean bean = new ItemBean(s, s);
> > list.add(bean);
> > }
> >
> > return list;
> > }
> >-- cut here --
> >
> >This will require defining new annotations JSONObject,
> >JSONObjectKey & JSONObjectValue. I think this is more natural to a
> >Java developer.
> >
> >-Arun
> >--
> >Web Technologies and Standards
> >Sun Microsystems, Inc.
> >Blog: http://blogs.sun.com/arungupta
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> >For additional commands, e-mail: users-help_at_jersey.dev.java.net
> >
>
> ---
> Marc Hadley <marc.hadley at sun.com>
> CTO Office, Sun Microsystems.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>