我想开发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/