@FormParam 不适用于 GET 方法-RestEasy
@FormParam does not work with GET method-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();
}
}
使用 GET 的输出是
addUser is called, name : null, age : 0
POST 的输出是
addUser is called, name : Abhi, age : 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>
我的问题是为什么我无法通过 @FormParam
使用 GET 请求获取值?
GET 请求表单的默认行为是将 key/values 放在 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")
并且年龄相同
我正在使用 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();
}
}
使用 GET 的输出是
addUser is called, name : null, age : 0
POST 的输出是
addUser is called, name : Abhi, age : 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>
我的问题是为什么我无法通过 @FormParam
使用 GET 请求获取值?
GET 请求表单的默认行为是将 key/values 放在 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")
并且年龄相同