Commit 48a00e96 by Patryk Czarnik

/order/{id}/customer - za pomocą przekierowania

parent 01d911b3
package sklep.rest; package sklep.rest;
import java.net.URI;
import java.util.List; import java.util.List;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
...@@ -10,13 +11,12 @@ import javax.ws.rs.PathParam; ...@@ -10,13 +11,12 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;
import sklep.db.CustomerDAO;
import sklep.db.DBConnection; import sklep.db.DBConnection;
import sklep.db.DBException; import sklep.db.DBException;
import sklep.db.OrderDAO; import sklep.db.OrderDAO;
import sklep.db.RecordNotFound; import sklep.db.RecordNotFound;
import sklep.model.Customer;
import sklep.model.Order; import sklep.model.Order;
@RequestScoped @RequestScoped
...@@ -50,9 +50,11 @@ public class ROrder { ...@@ -50,9 +50,11 @@ public class ROrder {
} }
} }
/*
// Metoda, która ma obsłużyć pobranie info o właścicielu zamówienia: // Metoda, która ma obsłużyć pobranie info o właścicielu zamówienia:
// /orders/1/customer // /orders/1/customer
// W tej wersji metoda zwraca bezpośrednio dane klienta. // W tej wersji metoda zwraca bezpośrednio dane klienta.
// Wada tego podejścia: ten sam rekord (konkretny klient) jest widoczny pod różnymi adresami URL.
@GET @GET
@Path("/{id:[0-9][0-9]*}/customer") @Path("/{id:[0-9][0-9]*}/customer")
public Customer getCustomer(@PathParam("id") Integer orderId) throws DBException, RecordNotFound { public Customer getCustomer(@PathParam("id") Integer orderId) throws DBException, RecordNotFound {
...@@ -64,5 +66,23 @@ public class ROrder { ...@@ -64,5 +66,23 @@ public class ROrder {
return customer; return customer;
} }
} }
*/
// W tej wersji w odpowiedzi na zapytanie o dane klienta, który złożył zamówienie,
// wyślemy przekierowanie pod adres tego klienta.
// To jest lepsze z punktu widzenia "dobrych praktyk REST".
@GET
@Path("/{id:[0-9][0-9]*}/customer")
public Response getCustomer(@PathParam("id") Integer orderId) throws DBException, RecordNotFound {
try(DBConnection db = DBConnection.open()) {
OrderDAO orderDAO = db.orderDAO();
Order order = orderDAO.findById(orderId);
URI customerURI = UriBuilder.fromResource(RCustomer.class)
.path("/{email}")
.build(order.getCustomerEmail());
return Response.seeOther(customerURI).build();
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment