2015-04-22 2 views
3

Я учусь веб-службы с Resteasy@FormParam не работает с Получ-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(); 

    } 
} 

выход с ГЭТ является

AddUser называется, имя: нулевой, возраст: 0

выход с POST является

AddUser называется, имя: Аби, возраст: 23

СПЯ для запроса GET является

<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. Если вы посмотрите в строке 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") и то же самое для возраста

+0

Благодаря @QueryParam это сработало. –

Смежные вопросы