gpt4 book ai didi

java - 使用 MultivalueMap 后调用中的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:50 26 4
gpt4 key购买 nike

我的服务出现问题。以下是我的服务

@POST
@Path("/config")
@Consumes(MediaType.APPLICATION_JSON)
public Response saveConfiguration(String name, MultivaluedMap<String,
Object> properties) {
return Response.ok().build();
}

我的测试用例是:

String payload = "{"name": "CRJ001", 
"properties": {"expression": ["a + b"],
"baseClass": ["org.carlspring.strongbox.crontask.test.MyTask"]}}";

WebTarget resource = client.getClientInstance().target(path);
Response response = resource.request(MediaType.APPLICATION_JSON).
post(Entity.entity(payload, MediaType.APPLICATION_JSON));

int status = response.getStatus();
assertEquals("Failed to save!", Response.ok().build().getStatus(), status);

但是我得到:

[[FATAL] Method public javax.ws.rs.core.Response org.abc.rest.ConfigurationRestlet.
saveConfiguration(java.lang.String,javax.ws.rs.core.MultivaluedMap)
on resource class org.abc.rest.ConfigurationRestlet contains multiple
parameters with no annotation. Unable to resolve the injection source.;

请帮我解决这个问题

最佳答案

您想要实现的是将多个参数从 POST 方法的 JSON 负载映射到您的 REST API,这个不行,请看this answer详细信息。

我知道您想传递属性列表;以上答案不太适合您的情况,

我在这里的建议是:将您的名称 参数转换为路径参数查询参数取决于它是否是可选的。

所以你应该像这样增强它:

路径参数(如果name参数是必须的)

@POST
@Path("/config")
@Consumes(MediaType.APPLICATION_JSON)
public Response saveConfiguration(@PathParam("name") String name, MultivaluedMap<String,
Object> properties) {
return Response.ok().build();
}

查询参数(如果名称​​参数是可选的)

@POST
@Path("/config/{name}")
@Consumes(MediaType.APPLICATION_JSON)
public Response saveConfiguration(@QueryParam("name") String name, MultivaluedMap<String,
Object> properties) {
return Response.ok().build();
}

在这种情况下,名称将作为您请求的查询参数传递:

POST .../config?name=name1

显然,在这两种情况下,您都不应该在 JSON 负载中传递“名称”参数。

关于java - 使用 MultivalueMap 后调用中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37537660/

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