users@jersey.java.net

RE: [Jersey] POST FormData

From: Saavedra, Gisella <gsaavedra_at_navis.com>
Date: Wed, 24 Jun 2009 10:52:49 -0700

thank you!

 

Yes, Form.put() handled the collection parameter properly.

 

 

 

From: Paul Sandoz [mailto:Paul.Sandoz_at_Sun.COM]
Sent: Wednesday, June 24, 2009 12:55 AM
To: users_at_jersey.dev.java.net
Subject: Re: [Jersey] POST FormData

 

 

On Jun 22, 2009, at 10:49 PM, Saavedra, Gisella wrote:





Re: INFO: Initiating Jersey application, version 'Jersey: 1.1.0-ea

 

 

I have a REST service with a parameter of type List<String>.

 

@POST

    @Produces("application/octet-stream")

    @Consumes("application/x-www-form-urlencoded")

    public Response getLogBundle(@FormParam("fromMillis") Long inFromMillis,

                                 @FormParam("toMillis") Long inToMillis,

                                 @FormParam("fileList") List<String> inFileList) {

...

}

 

At the client side, when I am building the FormData, I call

   formData.add("fileList", inNamedLogs);

where inNamedLogs is a List<String>

 

 

Are are using the Form.add method that does the following:

 

    public final void add(String key, Object value) {

        List<String> l = getList(key);

        

        if (value != null)

            l.add(value.toString());

        else

            l.add("");

    }

 

Namely it converts the value to a String by called value.toString(). So the information is getting converted on the client side. The "add" methods will only add a single value.

 

Try doing:

 

  formData.put("fileList", inNamedLogs);

 

or add each item in the list individually.

 

Paul.

 

 

The problem is the above, you are adding a list and it is getting converted to a String using the toS



See the value of my formDataàfileList argument (you can see the source and how it has been saved). There are TWO [[ surrounding the value.

 

<image002.png>

 

On the server side, getLogBundle() (code above), when I see the contents of fileList, I see each element having ONE [ surrounding the value.

So, when I do inFileList.get(0), I get "[C:\\N4\\sandbox...]" instead of "C:\\N4\\sandbox..."

 

Is this a bug? The documentation for the FormParam tag says that List<T> is supported; in this case T is String. I believe steps 1 to 4 of the JavaDoc are satisified.

 

Please advise. Thanks.

 

Gisella Saavedra
Sr. Software Engineer
gsaavedra_at_zebra.com

        

<image001.gif>

1000 Broadway, Suite 150, Oakland, CA 94607 | T+1 510 267 5123 T Main+1 510 267 5000 F+1 510 267 5100 | http://www.zebra.com/zes