gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:33:37 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com