/ / REST GET / POST jak wysyłać i odbierać złożone parametry? - java, reszta, koszulka

REST GET / POST, jak wysyłać i odbierać złożone parametry? - Java, reszta, koszulka

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ć:

  1. X Get (T) // dla złożonych zapytań o złożonym wyniku
  2. X Post (T) // do tworzenia ze złożonym wynikiem
  3. 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 № 1

REST 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
}

}