users@jersey.java.net

Re: application/json programming model

From: Marc Hadley <Marc.Hadley_at_Sun.COM>
Date: Fri, 31 Aug 2007 10:01:40 -0400

On Aug 31, 2007, at 9:23 AM, Arun Gupta wrote:

>>> 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.
> Yep, that's what I realized after looking at the code.
>
Sorry, I had about five projects open in NetBeans when I recommended
that sample and I think I confused the Bookmarks and Storage examples.

What you need to do is to create a JAXB bean with @XmlRootElement on
the class. Write a JAX-RS bean with a method that returns the JAXB
bean and is annotated with @ProduceMime("application/json") something
like:

@XmlRootElement
public class States {
   ...
}

@UriTemplate("states")
public class StatesResource {

   @HttpMethod
   @ProduceMime("application/json")
   States getStates() {
     ...
   }
}

The JAXB provider will automagically convert the returned States
class instance into JSON for you. I'm sure Jakub's example will show
this in more detail.

Marc.

>>> 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
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
> --
> 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.