2015-04-22 114 views
3

工作,我学习网络服务与RestEasy的@FormParam不GET方法,RestEasy的

我做休息容易的一个简单的基本例如使用@FormParam。 我的示例工作时,请求方法是POST 但是当我改变请求方法来GET

@Path("/form") 
public class FromParamService { 

    @POST 
    @Path("/add") 
    public Response addUser(
     @FormParam("name") String name, 
     @FormParam("age") int age) { 

     return Response.status(200) 
      .entity("addUser is called, name : " + name + ", age : " + age) 
      .build(); 

    } 


    @GET 
    @Path("/adduser") 
    public Response addUser1(
     @FormParam("name") String name, 
     @FormParam("age") int age) { 

     return Response.status(200) 
      .entity("addUser is called, name : " + name + ", age : " + age) 
      .build(); 

    } 
} 

用GET输出不工作是

ADDUSER叫,名:空,年龄:0与POST

输出是

ADDUSER叫,名称:ABHI,年龄:23​​

的GET请求的JSP是

<html><body>  

<form action="rest/form/adduser" method="get"> 
    <p> 
     Name : <input type="text" name="name" /> 
    </p> 
    <p> 
     Age : <input type="text" name="age" /> 
    </p> 
    <input type="submit" value="Add User" /> 
</form></body></html> 

和JSP的POST请求

<html><body> 


<form action="rest/form/add" method="post"> 
    <p> 
     Name : <input type="text" name="name" /> 
    </p> 
    <p> 
     Age : <input type="text" name="age" /> 
    </p> 
    <input type="submit" value="Add User" /> 
</form></body></html> 

我的问题是,为什么我我无法使用GET请求获取值@FormParam

回答

4

GET请求的表单的默认行为是将键/值放在query string中。如果你在地址栏看,你可能会看到类似

http://localhost:8080/app/form/addUser?name=something&age=100 

与之相对POST请求,这oart name=something&age=100实际上是在请求的身体,而不是在URL中。这是@FormParam的工作原理,因为它是以application/x-www-form-urlencoded数据类型为主体。 GET请求应该没有主体,所以数据是通过URL发送的。

为了让GET请求起作用,我们需要一个不同的注释来处理查询字符串。该注释是@QueryParam。所以只需更换@FormParam("name")@QueryParam("name")和年龄相同

+0

感谢@QueryParam它的工作。 –