CXF JAXRS - How do I pass Date as QueryParam

domino picture domino · Mar 1, 2012 · Viewed 67.5k times · Source

I have a service defined as follows.

public String getData(@QueryParam("date") Date date)

I'm trying to pass a java.util.Date to it from my client (which is jaxrs:client of CXF, not a generic HTTP client or browser).

My service receives the date as Thu Mar 01 22:33:10 IST 2012 in the HTTP URL. Since CXF won't be able to create a Date object using this String, my client receives a 404 error. I tried using a ParameterHandler on the service side, but I still can't parse it successfully because I'm not expecting the date in any specific format.

As per this post, passing a Date is supposed to work out of the box, but I can't seem to get the basic case working. Am I required to do anything in order to successfully pass a Date object from my client to service? Appreciate any help.

Thanks

Answer

Perception picture Perception · Mar 1, 2012

The problem is that JAX-RS dictates that parameter unbundling be done in one of two ways:

  1. The parameter bean has a public constructor that accepts a String
  2. The parameter bean has a static valueOf(String) method.

In your case, the Date is being unbundled via its Date(String) constructor, which cannot handle the input format your client is sending. You have a couple options available to remedy this:


Option 1

Get your client to change the format of the date before they send it. This is the ideal, but probably the hardest to accomplish!


Option 2