java - 使用 jersey-Rest 的 Post 方法并从 url 获取参数

标签 java rest jersey

我想开发rest api.例如: http://localhost:8080/TestSomeWay/resources/test/create?meg=sadasd&name=sadasd 并从 urlparams exp."meg"&"name"获取参数 我正在使用 jersey 开发 Restful post 方法 它没有成功 代码:

@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
@Override
public String create( @FormParam("meg")String megString, @FormParam("name")String nameString) {
   TestUser testUser=new TestUser();
   testUser.setMeg(megString);
   testUser.setName(nameString);
   em.persist(testUser);
   em.flush();
   return testUser.getId().toString();

}

最佳答案

您似乎对自己想要实现的目标感到困惑,这表现为一个不连贯的 API。一旦你犯了这样的错误,事情就会出错也就不足为奇了!

首先,您必须弄清楚您使用的是 GET、PUT 还是 POST,在后两种情况下,您正在使用的内容类型是什么(PUT 和 POST)通常正在处理传入的文档。此外,如果你正在做任何不是幂等的事情(即,如果你连续做两次就像一次一样,那么它会“相同”)那么你绝对应该使用 POST;典型的例子是支付某些商品的费用,您绝对不想重复这样做,而设置您的偏好可以是幂等的。最后一个复杂之处是,将查询参数与正文混合通常是不好的风格;参数要么在查询部分,要么在正文中(或者它们在路径中,但在这种情况下,您在概念上处理不同的资源)。

如果您只是处理 HTML 表单,那么您需要的两种方法样式如下:

@GET
@Path("/create")
@Produces(MediaType.TEXT_PLAIN)
public String createFromGet(
        @QueryParam("meg") String meg,
        @QueryParam("name") String name) {
    ...
    return theString;
}
@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response createFromPost(
        @FormParam("meg") String meg,
        @FormParam("name") String name) {
    ...
    return Response.created(theNewUrl).entity(theString).build();
}

第一个处理像 /create?meg=foo&name=bar 这样的 URL 上的 GET,第二个处理像 /create 这样的 URL 上的 POST。然而,考虑到名称“create”,我会倾向于只使用 POST 版本,而不是尝试支持在查询部分对参数进行编码;创造是往往不是幂等的事物之一。

请注意,我假设您的创建正在制作资源(这是很好的 RESTful 编程!),因此我进行了调整以返回正确类型的响应;它比平常更复杂一些,但确实是正确的事情。

关于java - 使用 jersey-Rest 的 Post 方法并从 url 获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776283/

相关文章:

rest - 在 JBoss/Wildfly 9 上使用 JAX-RS 项目设置 Swagger.io 问题

Jersey ContainerRequestFilter 未触发

java - 二叉搜索树实例化

python - 将 CVS/SVN 转换为编程片段站点

java - gson中如何使用缩进生成json文件

java - REST API 或 Java API 之间的选择

java - 如何使用 Mustache 设置 HTML header

java - 在使用 jaxb 注释使用 Jersey 将 json 解码为 java bean 时如何使用一些间接寻址

java - 应用程序上的广播接收器已关闭(或在后台)

java - Spring 的安全。自定义认证管理器