users@jersey.java.net

[Jersey] Re: JSON: Integervalues of ArrayList<Integer> have quotes (in natural notation setting)

From: Jakub Podlesak <jakub.podlesak_at_oracle.com>
Date: Tue, 11 Jan 2011 12:21:18 +0100

Hi Peff,

You could use the Jackson JSON providers
as described in [1]? The configuration consists of just one
RC parameter, so should not be painful.

Does it work for you?

~Jakub

[1]http://jersey.java.net/nonav/documentation/latest/json.html#d0e1960


On 01/05/2011 03:33 PM, Peff wrote:
> Hi together,
>
> In order to solve two common issues with the json parser (no brackets
> with
> arrays of the size 1, integers have quotes like strings) i use the
> JSONConfiguration.natural().build() configuration.
>
> With that configuration I have to new problems now and I would be
> happy if
> you could help me.
>
> 1. When a ArrayList<Integer> is being parsed (/A/), the integer values
> are
> returned as if they were strings. So /A/ returns:
> {"list1":["1","3"],"nummer":2,"nummer2":99} where I expect it to return
> {"list1":[1,3],"nummer":2,"nummer2":99} since 1 and 3 are integers.
> When an
> Integer like nummer2 is parsed as a normal variable it is correctly
> parsed
> as integer.
> Does somebody have a recommendation how I get jersey to pars these
> values as
> integers?
>
> 2. My seconds questions concerns /B/. The only solution I found so far
> was
> to explicitly list all class names in cTypes to parse them later on
> with the
> natural setting. It seems to be a pain to write all the 60 different
> classes
> in this list (and I'm surly will forget some in the future) so I'm
> looking
> for a possibility to simply tell jersey to always use the natural
> setting.
> Does somebody know if and how this is possible?
>
> Thank you very much for your help!
>
> Stefan Peff
>
> -----------------------------------
> Jersey-bundle-1.4
>
> A ---------------------------------
>
> @Path("arraylistetest")
> @GET
> @Produces(MediaType.APPLICATION_JSON)
> public TestArrayList arraylisteTest() {
> TestArrayList testArrayList = new TestArrayList();
> return testArrayList;
> }
>
> B ---------------------------------
>
> @Provider
> public final class JAXBContextResolver implements
> ContextResolver<JAXBContext> {
>
> private final JAXBContext context;
>
> private final Set<Class> types;
>
> private final Class[] cTypes = {TestArrayList.class};
>
> public JAXBContextResolver() throws Exception {
> this.types = new HashSet(Arrays.asList(cTypes));
> this.context = new
> JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
> }
>
> public JAXBContext getContext(Class<?> objectType) {
> return (types.contains(objectType)) ? context : null;
> }
> }
>
> C ------------------------------------
>
> @XmlRootElement
> public class TestArrayList {
> @XmlElement
> public ArrayList<Integer> list1;
> @XmlElement
> public int nummer;
> @XmlElement
> public Integer nummer2;
>
> public TestArrayList() {
> super();
> list1 = new ArrayList<Integer>();
> list1.add(1);
> nummer = 2;
> nummer2 = 99;
> }
> }
>
>
>
> ------------------------------------------------------------------------
> View this message in context: JSON: Integervalues of ArrayListhave
> quotes (in natural notation setting)
> <http://jersey.576304.n2.nabble.com/JSON-Integervalues-of-ArrayList-Integer-have-quotes-in-natural-notation-setting-tp5892111p5892111.html>
> Sent from the Jersey mailing list archive
> <http://jersey.576304.n2.nabble.com/> at Nabble.com.