一尘不染

@FormParam不适用于GET方法-RestEasy

jsp

我正在用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,名称: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>

和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


阅读 422

收藏
2020-06-10

共1个答案

一尘不染

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

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")和相同的年龄

2020-06-10