users@jersey.java.net

[Jersey] Re: How to catch the response in case of an invalid query paramter

From: Rob - <skyscrapper666_at_hotmail.com>
Date: Mon, 18 Apr 2011 11:51:02 +1030

You don't have to catch anything.
Just validate the parameters you want if they give error then send 400. It couldn't be much easier than that. Jersey cannot do it for you because it does not know the semantics of your call.

From: pengfei.di_at_match2blue.com
Date: Sun, 17 Apr 2011 17:07:45 +0200
To: users_at_jersey.java.net
Subject: [Jersey] Re: How to catch the response in case of an invalid query paramter

Yes, I also think status 400 is the correct one. The problem is that I cannot catch the response and set its status to from 404 to 400. Suppose the expected query parameter is int, and received is a string.

Pengfei
Am 17.04.2011 um 15:59 schrieb Rob - <skyscrapper666_at_hotmail.com>:


Too convoluted and not practical.
If you are sending in a STRING when you're expecting an INT then by definition you have a BAD REQUEST.
A BAD REQUEST is a client problem, not a server side one. Therefore, you should just return status code 400 - Bad Request.
Otherwise, you'll be violating well known practices.
Date: Fri, 15 Apr 2011 17:42:40 +0200
From: daniel.j.larsson_at_gmail.com
To: users_at_jersey.java.net
Subject: [Jersey] Re: How to catch the response in case of an invalid query paramter

I'm not sure what control you'll have of the response, but you can try create a wrapper class for the parameter:
class IntParam {

  ...
  public static IntParam valueOf(String value) {
    // Parse string, try throw a WebApplicationException // with the response in case it fails. If I
    // remember correctly, the response here is // ignored though :/

    ... }}

@GET
@Path("get")

public MyClass getSomething ( @QueryParam("age") IntParam age) { ...

}
2011/4/15 Pengfei Di <pengfei.di_at_match2blue.com>



  
    
    
  
  
    thanks for the suggestions!

    

    Yes, I know that I can circumvent the problem by declaring the age
    as String.

    However, I really want to know whether it is possible to declare the
    age as Integer, and then catch the exception or define the response
    by myself.

    

    

    Pengfei

    

    On 04/15/2011 05:35 AM, Rob - wrote:
    
      
      yep, 400 Bad request is better.

      

      Date: Fri, 15 Apr 2011 04:12:53 +0200

      From: daniel.j.larsson_at_gmail.com

      To: users_at_jersey.java.net

      Subject: [Jersey] Re: How to catch the response in case of an
      invalid query paramter

      

      Or 400 BAD REQUEST, the problem is with the client, not the
      server.

      

      2011/4/15 Rob - <skyscrapper666_at_hotmail.com>

        
          
            I'd declare "age" as a string and handle the validation
            myself. If error then return a 500 status code.
            

            
            No real benefits having "age" declared as integer (to
              my eyes).

              

> Date: Thu, 14 Apr 2011 12:42:57 +0200

> From: pengfei.di_at_match2blue.com

> To: users_at_jersey.java.net

> Subject: [Jersey] How to catch the response in case
              of an invalid query paramter
              
                

>

> Hello,

>

> I have a very simple GET REST API, which returns
                  something only based on

> the query parameter. For example:

> @GET

> @Path("get")

> public MyClass getSomething ( @QueryParam("age")
                  Integer age);

>

> As listed above, I specify the parameter type as
                  Integer. However,

> problem occurs when the given parameter cannot be
                  parse to an integer.

> For an instance: if the parameter is set as
                  "age=one" instead of

> "age=1", Jersey server will say "HTTP status 404
                  - Not Found."

>

> What I want to do is to specify the response by
                  myself, but I have no

> idea where I can do it. Shouldn't Jersey throw an
                  

> NumberFormatException. In fact, it doesn't. :(

>

> Thanks for any hint

> Pengfei

>

>

                
              
            
          
        
      
      

    
    

    

    --
Pengfei Di
Technology

match2blue software development GmbH
Leutragraben 1
07743 Jena

Tel: +49 3641 816 8092
Mobil: +49 1520 166 8691
Fax: +49 3641 573 3479
Email: pengfei.di_at_match2blue.com
Web : www.match2blue.com
Blog : http://blog.match2blue.com
Registergericht: Amtsgericht Jena
Registernummer: HRB 503726
Geschäftsführerin: Stephanie Renda