2016-11-27 55 views
1

我想在「createPost」方法中引入兩個String params(類型和內容)。如何使用curl使用2個參數進行POST?休息。 Java

我用這行:

curl -i -u pepe:pepe -d 'type=Link&content=www' --header "Content-Type: application/json" http://localhost:8080/web-0.0.1-SNAPSHOT/api/user/post 

不過...。那行推出的第一個參數 「type = Link的&含量= WWW」,並留下第二個空。

的方法是這樣的:

@POST 
@Path("/post") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response createPost(@FormParam("type") String type, @FormParam("content") String content) { 
    postEJB.createPostUserRest(type, content); 
    URI userURI = uriInfo.getAbsolutePathBuilder().build(); 
    return Response.created(userURI).build(); 
} 

我怎麼會在第二,第一和「WWW」進入「鏈接」?

非常感謝所有人,併爲我可憐的英語感到難過。

回答

2

有幾個問題在這裏:

  • 爲了確保curl發送POST請求,請使用-X POST
  • createPost預計MediaType.APPLICATION_JSON的方法,這是不符合的curl-d選項兼容。 (另外,如果我沒有記錯的話,使用這種媒體類型的東西是非常棘手的,儘管當然可以。)。我建議使用MediaType.APPLICATION_FORM_URLENCODED代替,這與curl-d兼容,並且更容易讓事情正常工作。
  • 要傳遞多個表單參數,您可以使用多個-d選項

概括起來,改變Java代碼是:

@POST 
@Path("/post") 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public Response createPost(@FormParam("type") String type, @FormParam("content") String content) { 
    postEJB.createPostUserRest(type, content); 
    URI userURI = uriInfo.getAbsolutePathBuilder().build(); 
    return Response.created(userURI).build(); 
} 

而捲曲的要求是:

curl -X POST -d type=Link -d content=www -i -u pepe:pepe http://localhost:8080/web-0.0.1-SNAPSHOT/api/user/post 

請注意,我放棄了Content-Type: application/json標題。 默認的是application/x-www-form-urlencoded, 也暗示了-d的工作方式, 和我們改變上面的Java代碼所需的方式。

相關問題