On Mar 11, 2009, at 4:22 PM, António Mota wrote:
> I'm doing the same as you, sending a Bad Request on that situation.
Agreed a 400 is more appropriate.
Paul.
> _______________________________________________
>
> 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
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>