我正在使用Jersey来实现JAX-RS资源。我在Stack Overflow,各种博客和Jersey User Guide上看到了很多不同的例子。
我想知道给定资源处理程序的不同重载是什么。是否有单一来源记录这些内容?
例如,以下内容处理HTTP POST请求。请求正文被捕获为MultivaluedMap
。
@POST
public Response httpPostRequest(MultivaluedMap<String, String> body)
{
...
}
或者,以下重载会将正文捕获为单个String
。
@POST
public Response httpPostRequest(String body)
{
...
}
还有其他重载。有多少人,他们在哪里记录?
答案 0 :(得分:0)
这只是一个普通的Java方法,它有一个或多个与之关联的注释。该方法的签名对泽西没有特别的限制。
话虽如此,您需要确保将各种注释(例如@Consumes
,@PathParam
,@QueryParam
,@PathParam
)应用于数据类型泽西岛知道如何映射。例如,Jersey将String
映射到long
或@Consumes(MediaType.APPLICATION_XML)
没有问题。 Jersey也可以使用具有JAXB注释的Java类,因此您的方法签名可以包含与@GET
@Produces(MediaType.APPLICATION_XML)
@Path("somepath")
public Foos getFoosByQuery(@PathParam("businessName") String businessName,
@PathParam("businessUnitName") String businessUnitName, @PathParam("fileType") String fileType,
@QueryParam("from") String fromString, @QueryParam("to") String toString,
@DefaultValue("10") @QueryParam("interval") int intervalMinutes,
@DefaultValue("1000") @QueryParam("limit") int limit,
@DefaultValue("false") @QueryParam("errors") boolean errors) {
结合的JAXB类型,Jersey会将请求内容从XML文档转换为JAXB Java类。
例如:
String
在这里,我们看到我们有许多参数(类型为int
,boolean
和@PathParam
),返回类型为JAXB注释的POJO。 Jersey从路径中提取@QueryParam
值,从查询字符串中提取 int flags = DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_NO_YEAR;
String s = DateUtils.formatDateTime(this, System.currentTimeMillis(), flags);
值,并将返回值转换为XML文档,并将其作为响应内容包含在内。
我还会注意到方法的名称可以是我们想要的任何东西,因此“重载”的概念与Jersey正交。适用普通的Java重载规则。
从这个例子中可以明显看出,你无法枚举可以与Jersey一起使用的所有可能的“重载”。
对于泽西可以做的所有可能的类型映射,或许有一个不同的问题可能更符合您的要求。