Korzystam z Jersey i przekształcam istniejące usługi danych w usługi danych RESTful. Najprostsze GET i PUT, które udało mi się przekonwertować. Ale niektóre z nich nie są w stanie przekonwertować:
- X Get (T) // dla złożonych zapytań o złożonym wyniku
- X Post (T) // do tworzenia ze złożonym wynikiem
- X PUT (T) // do aktualizacji z pewnym obiektem komunikatu o powodzeniu
gdzie T i X są złożonymi obiektami
Próbowałem @queryparam, @pathparam ze złożonymi obiektami na GET z @consume & @pruce i te nie działały. Próbowałem także POST (chociaż naprawdę potrzebowałem GET) z kodowaniem URL i to też nie działało.
Proszę pomóż. Potrzebuję przykładowego kodu, który to robi.
Odpowiedzi:
2 dla odpowiedzi № 1REST nie jest przeznaczony do obsługi złożonych zapytania ponieważ zapytanie jest w rzeczywistości adresem URL. Podczas pobierania zasobu określasz jego identyfikator. Jest to po prostu liczba lub ciąg znaków i jest łatwo reprezentowany na przykład w adresie URL;
http://host/employee/57
dostaniesz pracownika 57. Jeśli Twoje wymagania są bardziej skomplikowane, możesz skorzystać z metody wyszukiwania, w której przekazujesz kilka parametrów. Możesz użyć @QueryParam
tutaj, ale to nie jest tak naprawdę REST w czystej formie.
Jeśli wysyłasz lub umieszczasz dane, używaszten sam adres URL, jak gdybyś robił GET, tylko tym razem wysyłasz dane w treści. Ponieważ jesteś w stanie serializować obiekt w celu zwrócenia go do żądania GET, twój klient powinien również mieć możliwość serializacji obiektu, aby wysłać go do ciebie w PUT lub POST.
Oto przykład GET i POST;
@XmlType
public class Employee {
private int id;
private String name;
//getters and setters
}
@Path("/employee")
public class EmployeeService {
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_XML)
public Employee get(@PathParam("id") String id) {
Employee e = employeeDao.getEmployee(id);
if (e != null) {
return e;
} else {
throw new WebApplicationException(404);
}
}
@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Employee post(Employee employee) {
return employeeDao.insertEmployee(employee); //Assumes your DAO sets the ID
}
}