Java Jersey REST和PathParam正则表达式

Java Jersey REST和PathParam正则表达式,java,regex,rest,jersey-1.0,path-parameter,Java,Regex,Rest,Jersey 1.0,Path Parameter,我正在尝试使用Jersey开发RESTWeb服务。我的要求是能够访问web服务并根据传递的PatParam参数返回数据。到目前为止,我的web服务如下所示: @GET @Produces(MediaType.APPLICATION_JSON) @Consumes({ "application/xml", "application/json", "application/x-www-form-urlencoded" }) @Path("/1.0/people{extension:(.json)*}

我正在尝试使用Jersey开发RESTWeb服务。我的要求是能够访问web服务并根据传递的PatParam参数返回数据。到目前为止,我的web服务如下所示:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Consumes({ "application/xml", "application/json", "application/x-www-form-urlencoded" })
@Path("/1.0/people{extension:(.json)*}/{personId:([^/]+?)?}{entityExtension:(.json)*}")
public String getLocation(@PathParam("extension") String extension, @PathParam("personId") String personId,@PathParam("entityExtension") String entityExtension)
{
    if ((personId==null ||personId.equals("")) && (extension == null || extension.equals("")))
        return "No Id, and no extension";
    else
        return "personId= "+personId + ", extension= " + extension+", entityExtension= "+entityExtension;
}
考虑到上述代码,我试图实现以下目标:

http://localhost:8080/Jersey/RestService/1.0/people.json
应以“json”格式返回所有人员的列表(因此扩展名为.json)

现在,我希望能够通过简单地输入特定人员的ID来获取该人员的信息,并基于扩展返回json/xml格式的人员信息:

http://localhost:8080/Jersey/RestService/1.0/people/Mouhammed89.json
使用上面的URL,我应该返回personId:Mouhammed89的信息,并以json格式返回信息

我知道我的问题在于我使用的正则表达式,因此我非常感谢您帮助我创建它们。

IMHO容器(
列表)和项目(
个人
URL
应该分开处理。 而且返回
json
响应不需要显式的
.json
前缀,只有
API
级别的注释就足够了

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people") //no need for .json suffix as API only return JSON format
public List<String> allLocations(..){ //jackson etc. will convert return type to json string 
..
}

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/1.0/people/{personId: \\d+}")//digits only
public String getLocation(..){ //jackson etc. will convert return type to json string 
..
}
@GET
@产生(MediaType.APPLICATION_JSON)
@Path(“/1.0/people”)//不需要.json后缀,因为API只返回json格式
public List allLocations(..){//jackson等将返回类型转换为json字符串
..
}
@得到
@产生(MediaType.APPLICATION_JSON)
@路径(“/1.0/people/{personId:\\d+}”)//仅限数字
公共字符串getLocation(..){//jackson等将返回类型转换为json字符串
..
}

谢谢。我之所以依赖PathParameter来决定返回哪种格式,是因为我希望一些客户端发送请求而不在头中发送“Accept”,在这种情况下,我不知道返回哪种格式。这就是我们决定在URL中包含扩展的原因。好的,我认为这应该可以帮助您将扩展映射到
媒体类型
,谢谢,太棒了。最后我做了两种不同的web服务方法:一种是获取所有人的列表,另一种是获取特定人的信息。我还实现了自定义PackageResourceConfig,它帮助我在URL本身中传递了我想要的扩展,Jersey最终为我完成了XML/JSON映射=)