I'm doing the same as you, sending a Bad Request on that situation.
_______________________________________________
Melhores cumprimentos / Beir beannacht / Best regards
António Manuel dos Santos Mota
_______________________________________________
2009/3/11 Rabick, Mark A (MS) <Mark.Rabick_at_ngc.com>:
> In the code below, Javi throws a
> WebApplicationException(Response.Status.PRECONDITION_FAILED) in the
> event a required query param value is not specified in a URI:
>
> @GET
> public String getParamA(@QueryParam("paramA") String paramA) {
>
> if (paramA == null) {
> throw new
> WebApplicationException(Response.Status.PRECONDITION_FAILED);
> <...>
>
> I currently have code that checks query param bound variables for null
> on 'required' URI params and throws a 400 (BadRequest)
>
> @GET
> @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
>
> public Node getNodeById(@QueryParam("nodeid") String nodeId) {
>
> if (nodeId == null)
>
> throw new BadRequestException("parameter [nodeid] required.");
>
> <...>
>
> The BadRequestException wraps a Status.BAD_REQUEST
>
> public class BadRequestException extends WebApplicationException {
>
> /**
> *
> */
> private static final long serialVersionUID =
> 5052247111383429632L;
>
> /**
> * Create a HTTP 400 (Bad Request) exception.
> */
> public BadRequestException() {
> super(Response.status(Status.BAD_REQUEST).build());
> }
>
> /**
> * Create a HTTP 400 (Bad Request) exception.
> * @param message the String that is the entity of the 400 response.
> */
> public BadRequestException(String message) {
> super(Response.status(Status.BAD_REQUEST)
> .entity(String.format("BAD REQUEST: %s", message
> ))
> .type("text/plain")
> .build());
> }
>
> }
>
> Is it more appropriate to use a 400 (BAD REQUEST) or 412 (PRECONDITION
> FAILED)? It seems that 400 is more appropriate given the HTTP 1.1
> Status Code Defintions:
>
> http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
>
> 10.4.1 400 Bad Request
>
> The request could not be understood by the server due to malformed
> syntax. The client SHOULD NOT repeat the request without modifications.
>
> 10.4.13 412 Precondition Failed
>
> The precondition given in one or more of the request-header fields
> evaluated to false when it was tested on the server. This response code
> allows the client to place preconditions on the current resource
> metainformation (header field data) and thus prevent the requested
> method from being applied to a resource other than the one intended.
>
> 412 seems to be only concerned with request-header conditions, not URL
> query parameter values.
>
> --mark
> _______________________________________________
> Mark A. Rabick - Software Engineer
> Em: mark.rabick_at_ngc.com
>
>
>
>
> ________________________________
>
> From: Javi Moran [mailto:fjmoranrua_at_gmail.com]
> Sent: Tuesday, March 10, 2009 11:52 AM
> To: users_at_jersey.dev.java.net
> Subject: [Jersey] ambiguous resource method for HTTP method
>
>
> Hello,
>
> I am a newcomer to the jersey project, I am playing with the
> resources
> and I have the following question/problem.
>
> I have a class which is a resource and I added to it two methods
> with
> the annotation @GET. I wanted one of them was the one invoked
> when in
> the http request URL I had a paramater paramA and a second
> method to be
> invoked when the http request I received had a parameter paramB.
> The
> code is:
>
> "
> @GET
> public String getParamA(@QueryParam("paramA") String paramA)
> {
>
> if (paramA == null) {
> throw new
> WebApplicationException(Response.Status.PRECONDITION_FAILED);
> }
>
> return "Echo " + paramA;
> }
>
> @GET
> public String getParamB(@QueryParam("paramB") String paramB)
> {
>
>
> if (paramB == null) {
> throw new
> WebApplicationException(Response.Status.PRECONDITION_FAILED);
> }
> return "Echo " + paramB;
>
> }
> "
>
> When I run this I get the runtime error:
>
> GRAVE: A resource, class org.masterswl.rest.HelloWorldResource,
> has
> ambiguous resource method for HTTP method GET and output
> mime-type:
> text/plain. The problematic mime-type sets (as defined by
> @Produces
> annotation at Java methods getParamA and getParamB) are
> [text/plain] and
> [text/plain]
> 10-mar-2009 17:40:47
> com.sun.jersey.server.impl.application.WebApplicationImpl
> newResourceClass
>
> com.sun.jersey.api.container.ContainerException: Fatal issues
> found at
> class org.masterswl.rest.HelloWorldResource. See logs for more
> details.
> at
>
> com.sun.jersey.server.impl.application.WebApplicationImpl.newResourceCla
> ss(WebApplicationImpl.java:286)
>
> So, the question is ?
>
> (*) Is there an error in jersey or in my installation or
> isn't
> there ?
> (*) If there isn't an error, cannot you design the things in
> the way
> I did ?
>
> ---
> Javier Moran Rua
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>
>