Commit 0c10bfca by Patryk Czarnik

Response.created

parent 33d9de06
package sklep.rest; package sklep.rest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.URI;
import java.util.List; import java.util.List;
import jakarta.ws.rs.Consumes; import jakarta.ws.rs.Consumes;
...@@ -11,6 +12,8 @@ import jakarta.ws.rs.PUT; ...@@ -11,6 +12,8 @@ import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path; import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam; import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces; import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriBuilder;
import sklep.db.DBConnection; import sklep.db.DBConnection;
import sklep.db.DBException; import sklep.db.DBException;
import sklep.db.ProductDAO; import sklep.db.ProductDAO;
...@@ -112,13 +115,14 @@ public class RProducts { ...@@ -112,13 +115,14 @@ public class RProducts {
// POST potrafi "dodać rekord do katalogu". // POST potrafi "dodać rekord do katalogu".
@POST @POST
@Consumes({"application/json", "application/xml"}) @Consumes({"application/json", "application/xml"})
@Produces({"application/json", "application/xml"}) public Response zapiszProdukt(Product product) throws DBException {
public Product zapiszProdukt(Product product) throws DBException {
try(DBConnection db = DBConnection.open()) { try(DBConnection db = DBConnection.open()) {
ProductDAO productDAO = db.productDAO(); ProductDAO productDAO = db.productDAO();
productDAO.save(product); productDAO.save(product);
db.commit(); db.commit();
return product; // Pobranie adresu obsługiwanego przez klasę RProducts i dodanie id konkretnego produktu:
URI uri = UriBuilder.fromResource(RProducts.class).path("/{id}").build(product.getProductId());
return Response.created(uri).build();
} }
} }
...@@ -131,9 +135,10 @@ public class RProducts { ...@@ -131,9 +135,10 @@ public class RProducts {
// POST używajmy wtedy, gdy nie wiemy z góry pod jakim adresem dane zostaną zapisane, np. gdy id rekordu jest generowane z sekwencji. // POST używajmy wtedy, gdy nie wiemy z góry pod jakim adresem dane zostaną zapisane, np. gdy id rekordu jest generowane z sekwencji.
// Taka metoda powinna dać w odpowiedzi informację o ID utworzonego rekordu. // Taka metoda powinna dać w odpowiedzi informację o ID utworzonego rekordu.
// Kilka możliwości: // Kilka możliwości:
// 1) (w tej klasie) - odesłanie uzupełnionego rekordu - trochę niewydajne, ale wygodne // 1) odesłanie uzupełnionego rekordu - trochę niewydajne, ale wygodne
// 2) minimalny dokumencik JSON, w którego wnętrzu jest zawarta ta informacja (tak robi wiele usług w praktyce, np. PayU) // 2) minimalny dokumencik JSON, w którego wnętrzu jest zawarta ta informacja (tak robi wiele usług w praktyce, np. PayU)
// 3) (zobaczymy jeszcze) - odesłać odpowiedź typu Created z nagłówkiem Location - najlepsze z punktu widzenia standardów/dobrych praktyk // 3) (teraz w tej wersji) - odesłać odpowiedź typu Created z nagłówkiem Location - najlepsze z punktu widzenia standardów/dobrych praktyk
// Aby zwracać taie "techniczne" odpowiedzi, używa się klasy Response.
@DELETE @DELETE
@Path("/{id}") @Path("/{id}")
......
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