我有一个Rest服务,我想用以下路径回复请求
1)/v1/config/type/service
2)/v1/config/type/service, service2
我想要的是能够将路径参数serviceName
存储为List
,其中每个元素都以逗号分隔。例如,如果某人键入v1/config/foo/bar1,bar2,bar3
,我希望serviceName
为List
,其中包含3个元素(bar1,bar2,bar3)。现在它只返回一个包含1个元素的列表,其中包含所有三个服务字符串。这甚至可能吗?或者是我只需要解析的东西。我的代码如下所示,由于我处于项目的开始阶段,因此非常粗糙:
@ApplicationPath("/")
@Path("/v1/config")
public class ServiceRetriever extends Application {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getHelloWorld() {
return "Hello World";
}
@GET
@Path("{type}/{serviceName}")
@Produces("application/zip")
public Response getServices(@PathParam("type") String type, @PathParam("serviceName")List<String> serviceNames,
@QueryParam("with_config") boolean withConfig, @QueryParam("with_drive") boolean withDriver) throws IOException
{
//some random file i made to test that we can return a zip
File file = new File(System.getProperty("user.home")+"/dummy.zip");
System.out.println(serviceNames.size()); //returns 1
//we can change the zip file name to be whatever
return Response.ok(file).header("Content-Type","application/zip").
header("Content-Disposition", "attachment; filename="+file.getName()).build();
}
答案 0 :(得分:0)
问题是你必须改变该变量的反序列化过程。通常,只有查询参数是列表,因此这可能与某些库不兼容。 你可以:
创建自己的注释,如@PathParamMutli并返回Arrays.asList(parameter.split(","));
。理想情况下,您应该可以访问框架源代码和分支权限。
使用查询参数