users@jersey.java.net

[Jersey] Re: POST with no argument

From: Robert DiFalco <robert.difalco_at_gmail.com>
Date: Fri, 13 Dec 2013 21:04:49 -0800

Ah okay. Wish there was still the uri() method in addition to the string path. In this case the string was properly created from a UriBuilder with query params properly specified.

Sent from my iPhone

> On Dec 13, 2013, at 8:53 PM, "Bill O'Neil" <oneil5045_at_gmail.com> wrote:
>
> A ? is not legal in the path. It is being correctly url escaped to
> /footest%3Ffoo=notnull
>
> Path and Query params need to be escaped differently.
>
>
>
>> On Fri, Dec 13, 2013 at 11:51 PM, Robert DiFalco <robert.difalco_at_gmail.com> wrote:
>> That's the difference. If you put the query paran in the path string per my example you should see it fail. Is that not considered legal?
>>
>> Sent from my iPhone
>>
>>> On Dec 13, 2013, at 8:46 PM, "Bill O'Neil" <oneil5045_at_gmail.com> wrote:
>>>
>>> ClientBuilder.newClient().target("http://localhost:8080/footest").queryParam("foo", "notnull").request().post(null);
>>>
>>>
>>>
>>> works fine
>>>
>>>
>>>
>>>> On Fri, Dec 13, 2013 at 11:44 PM, Robert DiFalco <robert.difalco_at_gmail.com> wrote:
>>>> Right because I think the issue is the client API.
>>>>
>>>> Sent from my iPhone
>>>>
>>>>> On Dec 13, 2013, at 8:33 PM, "Bill O'Neil" <oneil5045_at_gmail.com> wrote:
>>>>>
>>>>> I have no issues with this.
>>>>>
>>>>> Jersey 2.4.1
>>>>>
>>>>> @Path( "/footest" )
>>>>> @POST
>>>>> public void iDoNotKnowHowToDebug(
>>>>> @QueryParam( "foo") String foo,
>>>>> @Context UriInfo uriInfo ) throws Exception {
>>>>> System.out.println( "foo=" + foo );
>>>>> }
>>>>>
>>>>> curl -X POST "localhost:8080/footest?foo=notnull"
>>>>>
>>>>> output: foo=notnull
>>>>>
>>>>>
>>>>>> On Fri, Dec 13, 2013 at 11:18 PM, Robert DiFalco <robert.difalco_at_gmail.com> wrote:
>>>>>> I'm back with more questions found while upgrading from 1.9 to 2.4.1. I don't know if this is a client or a server issue.
>>>>>>
>>>>>> But if I perform a POST with no PathParam but with a QueryParam then the QueryParam will be overwritten with null. For example:
>>>>>>
>>>>>> @Path( "/footest" )
>>>>>> @POST
>>>>>> public void badlyDesignedPostOperation(
>>>>>> @QueryParam( "foo") String foo,
>>>>>> @Context UriInfo uriInfo ) throws Exception {
>>>>>> System.out.println( "foo=" + foo );
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Now the test code:
>>>>>>
>>>>>> resource().path( "/footest?foo=notnull" ).method( "POST" );
>>>>>>
>>>>>> Instead of "notnull" the output will be null because null with overwrite the QueryParameter. I'm guess POST was implemented to always think a parameter was being sent so it ends up overwriting the query parameter as a path parameter.
>>>>>>
>>>>>> Is this expected?
>