@FormParam不适用于GET方法-RestEasy

时间:2015-04-22 06:48:40

标签: java jsp rest jax-rs resteasy

我正在使用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,name:null,age: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>

POST请求的Jsp是

<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>

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

1 个答案:

答案 0 :(得分:4)

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

的内容
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"),将年龄替换为