Two GET methods with different query parameters :

2019-02-12 17:30发布

Could we create same GET URI but with different query parameters?

For Example: I have two REST GET URIs:

/questions/ask/?type=rest
/questions/ask/?byUser=john

Now the REST service is not recognizing two GET methods as separate and considering it only 1 GET method which is declared as first.

  1. why is it behaving this way?
  2. Is there any way that I could make two GET methods having different Query Parameters?

It would be highly appreciated if you could quote any resource.

4条回答
成全新的幸福
2楼-- · 2019-02-12 17:54

You can not have two getters with same uri but different request parameters. What you can do is to have one getter method with many request parameters.

@RequestMapping(value = "uri", method = RequestMethod.GET)
public String test(@RequestParam String type, @RequestParam String byUser) 

then call it with two parameters

/questions/ask/?type=rest&byUser=john

You have to handle the logic inside test method to handle these parameters accordingly.

Regarding Darijan, I think that it is up to to decide to go with two methods or one method considering what the underline logic is. If you are going with 2 methods then use two uri. If the business logic is ok to go with one uri then use the way I answered

查看更多
姐就是有狂的资本
3楼-- · 2019-02-12 18:00

You cannot Overload REST requests.

In your business layer you would have to check which of the two variables are set and then you will have to do the required processing.

查看更多
我命由我不由天
4楼-- · 2019-02-12 18:00

You can overload the rest endpoint in termsof what request/query parameters are present in the request. Here's the answer that solved my use case: create two method for same url pattern with different arguments

查看更多
霸刀☆藐视天下
5楼-- · 2019-02-12 18:06

Because a resource is uniquely identified by its PATH (and not by its params). Two resources you define have the same PATH.

@Path("/questions/ask")

According to JSR-311 spec:

Such methods, known as sub-resource methods, are treated like a normal resource method (see section 3.3) except the method is only invoked for request URIs that match a URI template created by concatenating the URI template of the resource class with the URI template of the method.

Since your data model includes two distinct resources I suggest making two rest methods with different paths:

@Path("/questions/ask/type")
@Path("/questions/ask/user")

This is the RESTful way, since one URI represents one and only one resource and there should be no overloading. If one URI represents more than one resource that means you got it wrong somewhere.

查看更多
登录 后发表回答