Java 具有多值映射的post调用中的问题

Java 具有多值映射的post调用中的问题,java,rest,jax-rs,restlet,Java,Rest,Jax Rs,Restlet,我的服务遇到了问题。 以下是我的服务 @POST @Path("/config") @Consumes(MediaType.APPLICATION_JSON) public Response saveConfiguration(String name, MultivaluedMap<String, Object> properties) { return Response.ok().build(); } 但我得到了: [[FATAL] Method public ja

我的服务遇到了问题。 以下是我的服务

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

[[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, 这是不可能的,请查看详细信息

我知道你想通过财产清单;上面的答案不太适合你的情况

我的建议是:将name参数转换为路径参数或查询参数,具体取决于它是否为可选参数

因此,您应该像这样增强它:

路径参数(如果名称参数是必需的)

@POST
@路径(“/config”)
@使用(MediaType.APPLICATION_JSON)
公共响应存储配置(@PathParam(“name”)字符串名称,多值映射属性){
返回Response.ok().build();
}
查询参数(如果名称参数是可选的)

@POST
@路径(“/config/{name}”)
@使用(MediaType.APPLICATION_JSON)
公共响应存储配置(@QueryParam(“name”)字符串名称,多值映射属性){
返回Response.ok().build();
}
在这种情况下,名称将作为请求的查询参数传递:

POST…/config?name=name1


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

什么是org.abc.rest.ConfigurationRestlet?这是rest服务类。您应该在参数
名称上使用JAX-RS注释。请求的哪一部分映射到了它?请详细说明您的方法
saveConfiguration
中有一个参数
String name
。Restlet试图将HTTP请求中的某些内容分配给这个参数,但它不知道是什么。您必须给出一个提示,例如在
name
上使用
@PathParam
注释。很抱歉,您的答案也不适合我的情况,我的问题是关于多值映射对象,而不是名称属性,但我尝试了您建议的解决方案,但它破坏了我的代码。我还做了类似的事情:
@POST@Path(“/config”)@Consumes(MediaType.APPLICATION_JSON)public-Response-saveConfiguration(MyClass-MyClass){return-Response.ok().build();}
而我的类是
class-MyClass{private-String-name;private-Map-properties;/*setter,getter*/}
但在rest服务中,我收到的负载是这个
“{”name:“CRJ001”属性“{}”
emptyproperties@Y-什么东西坏了?你是如何应用我建议的更改的?你的错误是什么(如果有的话)?您是否相应地调整了JSON负载?如果您决定将名称和属性列表放在同一个对象中,并且应该也可以使用,请记住使用“@XmlRootElement”注释您的“MyClass”类。我收到415:未知媒体类型错误,我使用路径参数单独发送名称属性,是的,我已经使用JAXB@XmlRootElement注释了,但效果不好,未知媒体类型错误与您对代码所做的更改无关;事实上,这意味着找到了您的路径,但媒体类型不同。确保您发送的是JSON,如果您使用的是postman之类的工具,请确保选择的媒体类型是JSON(应用程序/JSON)。
[[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
@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();
}