java - 如何使用curl使用2个参数进行POST?休息。 java

标签 java json rest curl

我想在“createPost”方法中引入两个字符串参数(类型和内容)。

我正在使用这条线:

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&content=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();
}

如何在第一个输入“Link”并在第二个输入“www”?

非常感谢大家,并对我糟糕的英语感到抱歉。

最佳答案

这里有几个问题:

  • 要确保 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 请求:

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 header 。 默认为application/x-www-form-urlencoded-d 的工作方式也暗示了这一点, 并且我们更改上面的 Java 代码的方式是必需的。

关于java - 如何使用curl使用2个参数进行POST?休息。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40830915/

相关文章:

java - ListView 在 android 中不起作用

java - 在java中使用vigenere密码加密字节数组

java - 重复类

arrays - JMeter - 需要遍历数组

javascript - 我无法获得在 android 10 api 29 或 api 30 上工作的 http 请求。但它确实适用于较低的 api

java - 为什么我的二叉搜索树删除不起作用?

json - 刷新按钮/自动更新 GOOGLE 电子表格

web-services - REST 可以通过 FTP 实现吗?

javascript - 单击某个按钮时如何向 angularjs 函数提交文本框值?

python - Django REST 仅列表(无详细信息)ViewSet