我是一名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类型知道要调用哪种方法。
我是对的吗?有人可以帮助我理解这一点。
感谢
答案 0 :(得分:1)
此处没有Java语言覆盖或重载。这些方法有不同的名称。
您的问题与servlet容器路由请求有关,它会根据许多因素路由请求。其中一个因素可能是@Produces
的值,该值与远程请求的accept
标头中指定的媒体类型相匹配。
答案 1 :(得分:1)
Rest端点调用将由Accept
标头
curl -v -H "Accept: application/json" --data "param1=value1¶m2=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¶m2=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 ...
}