两个具有相同休息终点的java方法

时间:2016-03-31 05:09:29

标签: java

我是一名java开发人员,从Java 5迁移到Java 1.7,我正在查看一些不知道可能的代码。

@Path("/myroot")
@Service
public class MyServiceClass {

@POST
@Produces({ "application/x-protobuf" })
@Path("bookid/{bookNumber}")
public Response findBookByBookId(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) {
    return ...
}

@POST
@Produces("application/json")
@Path("bookid/{bookNumber}")
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) {
    return ...;
}

我在这里有两个方法,具有相同的休息终点。唯一的区别是它们产生不同的共振类型。

我的问题是,如果调用应用程序正在调用rootUrl / bookId / 1234,那么看起来java足够聪明,可以根据Response类型知道要调用哪种方法。

我是对的吗?有人可以帮助我理解这一点。

感谢

2 个答案:

答案 0 :(得分:1)

此处没有Java语言覆盖或重载。这些方法有不同的名称。

您的问题与servlet容器路由请求有关,它会根据许多因素路由请求。其中一个因素可能是@Produces的值,该值与远程请求的accept标头中指定的媒体类型相匹配。

答案 1 :(得分:1)

Rest端点调用将由Accept标头

确定
 curl -v -H "Accept: application/json" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

将调用

@POST
@Produces("application/json")
@Path("bookid/{bookNumber}")
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) {
    return ...;
}

curl -v -H "Accept: application/x-protobuf" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

将调用

@POST
@Produces({ "application/x-protobuf" })
@Path("bookid/{bookNumber}")
public Response findBookByBookId(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) {
    return ...
}