1

我在 Java 中有一个使用 的服务Jersey,现在我想将以下三个 URL 映射到一个方法,这样如果任何函数具有.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) {
    ....
}
4

1 回答 1

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;
}

祝你今天过得愉快 ...

于 2014-10-27T14:27:25.090 回答