I am creating my API in Spring Boot. I have that a product is composed of components:
Here is my code: (Entity Layer)
import javax.persistence.*; import java.util.List; import java.util.ArrayList; @Table @Entity public class Product{ @Id @GeneratedValue private Long id; private String name; @OneToMany @JoinColumn private List<Component> productComponents = new ArrayList<>(); //default constructor public Product(){ } public Product(Long id, String name, List<Component> productComponents){ this.id = id; this.name = name; this.productComponents = productComponents; } //getters public Long getId(){ return this.id; } public String getName(){ return this.name; } public List<Component> getProductComponents(){ return this.productComponents; } //setters public void setId(Long id){ this.id = id; } public void setName(String name){ this.name = name; } public void setProductComponents(List<Component> productComponents){ this.productComponents = productComponents; } public void addProductComponent(Component component) { this.productComponents.add(component); } public void removeProductComponent(Component component) { this.productComponents.remove(component); }
}
My Question:
In the controller class should I change the update method to be as follows, to have the following code, product.addProduct(myComponent) or should I have it as follows: product.setProductComponents((Component) myProduct.getProductComponents()):
import java.util.List; @CrossOrigin @RestController @RequestMapping("/api/products/product") public class ProductController { private static ProductRepository myProductRepository; @PutMapping("/update/{id}") public Product updateProduct(@RequestBody Product myProduct, @RequestBody Component myComponent, @PathVariable Long id){ return myProductRepository.findById(id).map((product) ->{ product.setName(myProduct.getName()); //updated code product.setProductComponents(myProduct.getProductComponents()); product.addProductComponent(myComponent); /////// return myProductRepository.save(product); }).orElseGet(() ->{ myProduct.setId(id); return myProductRepository.save(myProduct); }); }
or is there a better solution?
Advertisement
Answer
I would suggest to have
public List<Component> getProductComponents(){ return this.productComponents; } public void setProductComponents(List<Component> productComponents){ this.productComponents = productComponents; }
Plus for convenience:
public void addProductComponent(Component component) { this.productComponents.add(component); } public void removeProductComponent(Component component) { this.productComponents.remove(component); }