@FormParam 不适用于 GET 方法-RestEasy

Abh*_*mar 3 java rest jsp jax-rs resteasy

我正在通过 Resteasy 学习 Web 服务

我正在做一个简单的基本示例,易于使用@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();

    }
}
Run Code Online (Sandbox Code Playgroud)

GET 的输出是

addUser 被调用,名称:null,年龄: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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*tha 6

GET 请求表单的默认行为是将键/值放入查询字符串中。如果您查看 URL 栏,您可能会看到类似的内容

http://localhost:8080/app/form/addUser?name=something&age=100
Run Code Online (Sandbox Code Playgroud)

与 POST 请求相反,此 oartname=something&age=100实际上位于请求正文中,而不是 URL 中。这就是@FormParam工作的地方,就像application/x-www-form-urlencoded数据类型一样,作为主体。GET 请求不应有正文,因此数据在 URL 中发送。

为了使 GET 请求正常工作,我们需要一个与查询字符串一起使用的不同注释。该注释是@QueryParam. 所以只需将年龄替换为@FormParam("name")相同@QueryParam("name")