我想开发rest api.例如: http:// localhost:8080/TestSomeWay/resources/test/create?meg = sadasd&name = sadasd 并从urlparams exp获取params."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();
}
Run Code Online (Sandbox Code Playgroud)
你似乎对你想要实现的目标感到困惑,并且这显示为一个不连贯的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;
}
Run Code Online (Sandbox Code Playgroud)
@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();
}
Run Code Online (Sandbox Code Playgroud)
第一个处理URL上的GET,/create?meg=foo&name=bar第二个处理对URL的POST /create.但是,鉴于名称"create",我很想使用POST版本,而不是尝试支持在查询部分中编码参数; 创造是那些往往不是幂等的东西之一.
请注意,我假设您的创建正在创建一个资源(这是一个很好的RESTful编程!)所以我调整为返回正确的响应; 它比平常更多参与,但这是正确的事情.
| 归档时间: |
|
| 查看次数: |
11640 次 |
| 最近记录: |