Jax-RS中的可选@PathParam,格式为.json .xml

时间:2014-10-27 12:07:46

标签: xml json jersey jax-rs path-parameter

我使用Jersey在Java中提供服务,现在我想将以下三个网址映射到一个方法,这样如果任何函数有.json.xml相应地转换输出如果没有提供扩展名(格式),则默认返回为json

以下代码工作正常,但如果未指定.xml或.json url未找到

/api/getData       (result is json)
/api/getData.json  (result is json) 
/api/getData.xml   (result is xml)

请注意我无法将其更改为

/api/getData/xml
/api/getData/json

我希望他们成为functionName.format

@POST
        @Path("/getData{format}")
        @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
        public Response getData(
                    @FormParam("token") String token, 
                    @PathParam("format") String format, 
                    @Context HttpServletRequest context) {
    ....
}

1 个答案:

答案 0 :(得分:2)

您需要添加通配符以支持使用单个资源的非扩展请求,例如:

{[pathParamName]:([allowedEndings])[wildcardSign]} - > {ext:(.json|.xml)*}

示例:

@GET
@Path("foo/{bar}{ext:(.json|.xml)*}")
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public synchronized Response getEvents(@PathParam("bar") String bar, @PathParam("ext") String ext) {
    if("".equals(ext))
        ext = ".json";
    System.out.println(bar);
    System.out.println(ext);
    // ...
    return null;
}

祝你有愉快的一天......