Używamy Resteasy i mamy problem z określeniem sposobu wywoływania niektórych metod @GET.Czy RestEasy może serializować POJO dla metody @GET?
Jeśli interfejs metody ma tylko proste parametry, nie ma problemu. Ex:
@GET
@Path("/test/{myparam}")
public FacetQueryResultImpl testMethod(@PathParam("myparam")String myparam);
Ale jeśli spróbujemy użyć POJO jako parametr wydaje RestEasy nie jest w stanie szeregować je jako parametry kwerendy. Ex:
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(ParamPojo myparam);
lub
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(@QueryParam("myparam")ParamPojo myparam);
(z, ParamPojo.java :)
public class ParamPojo
{
private String name;
private String description;
(...)
}
Kiedy próbujemy to czasami usługi są nie znaleziono, a czasami otrzymujemy „A Żądanie GET nie może mieć ciała. " wyjątek.
Używając @POST możemy używać POJO ma parametr, ale niektóre z naszych metod nie modyfikują niczego na serwerze, dlatego powinny używać @GET.
Obejście polega na "wybuchnięciu" ParamPojo i wykorzystaniu wszystkich jego właściwości jako oddzielnych parametrów dla metody. Ale to usuwa "łatwą" część "RestEasy", prawda?
Dzięki Eiden, to mile widziana! – electrotype
Należy pamiętać, że wysyłanie danych w żądaniach GET jest niezgodne z filozofią REST, patrz "oficjalna" odpowiedź od Roy Fielding tutaj: http://stackoverflow.com/questions/978061/http-get-with-request-body/983458#983458 – Gregor
@Gregor Powyższy przykład nie wysyła żadnych danych w treści żądania. – eiden