gpt4 book ai didi

java - 将来自 REST 调用的 @PathParam 值存储在列表或数组中

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:09:36 24 4
gpt4 key购买 nike

我的函数如下所示:

    @PUT
@Path("property/{uuid}/{key}/{value}")
@Produces("application/xml")
public Map<String,ValueEntity> updateProperty(@Context HttpServletRequest request,
@PathParam("key") String key,
@PathParam("value") String value,
@PathParam("uuid") String uuid) throws Exception {
...
}

我必须修改它,所以它接受来自 REST 调用的不确定(或许多)键值对列表,比如

@Path("property/{uuid}/{key1}/{value1}/{key2}/{value2}/{key3}/{value3}/...")

是否可以将它们存储在数组或列表中,所以我没有列出几十个@PathParams 和参数,以避免这种情况:

@PathParam("key1") String key1,
@PathParam("key2") String key2,
@PathParam("key3") String key3,

最佳答案

可能是重新考虑此设计的好机会。通过使用 /,我们在某种程度上表示,每个 / 我们都在尝试定位不同的资源。键/值对(在 URL 的上下文中)主要用于查询参数或矩阵参数。

如果/property/{uuid}是一个主要资源的路径,我们只是想提供一些参数给客户端访问这个资源,那么我们可以允许矩阵参数或查询参数

矩阵参数(在请求 url 中)看起来像

/12345;key1=value1;key2=value2;key3=value3

获取值的资源方法可能类似于

@GET
@Path("/property/{uuid}")
public Response getMatrix(@PathParam("uuid") PathSegment pathSegment) {
StringBuilder builder = new StringBuilder();

// Get the {uuid} value
System.out.println("Path: " + pathSegment.getPath());

MultivaluedMap matrix = pathSegment.getMatrixParameters();
for (Object key : matrix.keySet()) {
builder.append(key).append(":")
.append(matrix.getFirst(key)).append("\n");
}
return Response.ok(builder.toString()).build();
}

查询参数(在请求 url 中)可能类似于

/12345?key1=value1&key2=value2&key3=value3

获取值的资源方法可能类似于

@GET
@Path("/property/{uuid}")
public Response getQuery(@PathParam("uuid") String uuid,
@Context UriInfo uriInfo) {

MultivaluedMap params = uriInfo.getQueryParameters();
StringBuilder builder = new StringBuilder();
for (Object key : params.keySet()) {
builder.append(key).append(":")
.append(params.getFirst(key)).append("\n");
}
return Response.ok(builder.toString()).build();
}

不同的是,Matrix 参数可以嵌入到路径段中,而查询参数必须放在 URL 的末尾。您还可以注意到语法上的一些差异。


一些资源


更新

同时查看方法签名中的 PUT,您似乎正在尝试使用路径作为您尝试更新的值来更新资源,因为我没有看到任何参数在实体主体的方法中。 PUT 时,您应该在实体主体中发送表示,而不是作为路径段参数。

关于java - 将来自 REST 调用的 @PathParam 值存储在列表或数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com