2016-05-31 75 views
3

我在服務中遇到問題。 下面是我的服務用多值地圖發帖後致電

@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.; 

請幫我這一點

+0

什麼是'org.abc.rest.ConfigurationRestlet'? – 2016-05-31 06:43:42

+0

它是休息服務類 – Yougesh

+0

您應該在參數'name'上使用JAX-RS註釋。請求的哪部分映射在它上面? – 2016-05-31 07:48:53

回答

2

你是什麼試圖實現的是將多個參數從POST方法的JSON負載映射到您的REST API這是不可能的,詳情請看this answer

我知道你想傳遞屬性列表;上面的答案並不完全適合您的方案,

我的建議在這裏:參數轉換您名字命名的路徑參數或到查詢參數取決於如果它是可選的還是不。

所以你要加強它,像這樣:

path參數(如果參數是必需的)

@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 ... /配置名稱= NAME1

,顯然在這兩種情況下,你不應該通過「名」參數在你的JSON有效載荷中。

+0

我很抱歉地說你的回答也不適合我的情況,我的問題關於MultiValueMap對象,而不是名稱屬性,但我嘗試了你的建議解決方案,但它更多地破壞我的代碼 – Yougesh

+0

我也做了一些這樣的事情: ' @Resource @Path(「/ config」) }' 而我的班級是 'class MyClass {0} {0} {0}私人字符串名稱; 私人地圖<字符串,對象>屬性; /*傳,吸氣*/ }' 但在休息服務我收到有效載荷這個 ' 「{」 名 「: 」CRJ001「, 」屬性「:{}}」' 空性質 – Yougesh

+1

@ Y-PKhatri什麼壞了?你是如何應用我所建議的改變的?你得到的錯誤是什麼(如果有的話)?你是否相應地調整了你的JSON負載? 如果您決定將名稱和屬性列表放在同一個對象中,請記住使用'@XmlRootElement'註釋'MyClass'類 – LeTex