0
Eae people , this is the first time I’m programming for the web and using spring boot for it , is a college project where Frontend will be done in JS with React and Back made in JAVA with Spring . with the postgre database. I stayed with the Back End and everything was fine until I needed to work with compound classes (classes that have other classes as attribute). I have to make a sort of shopping list , a cart class that has as attribute a shopping list array , in which buying has as attribute a product.
package com.api.springboot.model;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.hibernate.annotations.Cascade;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "carrinhos")
public class Carrinho implements Serializable {
private static final long serialVersonUID = 1L;
public Carrinho() {
this.terminado = false;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nome;
private boolean terminado;
private float precoTotal;
@OneToMany
//(cascade = CascadeType.ALL, mappedBy = "carrinhos")
@JoinColumn(name = "carrinho_id")
private List<Compra> compras = new ArrayList<>();
@ManyToOne
private Comprador comprador;
@CreatedDate
private Date criadoEm = new Date();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public boolean isTerminado() {
return terminado;
}
public void setTerminado(boolean terminado) {
this.terminado = terminado;
}
public float getPrecoTotal() {
return precoTotal;
}
public void setPrecoTotal(float precoTotal) {
this.precoTotal = precoTotal;
}
public void setCriadoEm(Date criadoEm) {
this.criadoEm = criadoEm;
}
public List<Compra> getCompras() {
return compras;
}
public void setCompras(List<Compra> compras) {
this.compras = compras;
}
public void adicionarCompra(Compra compra){
this.compras.add(compra);
}
public Date getCriadoEm() {
return criadoEm;
}
public Comprador getComprador() {
return comprador;
}
public void setComprador(Comprador comprador) {
this.comprador = comprador;
}
public void add(Compra compra){
compras.add(compra);
}
@Override
public String toString() {
return "Carrinho{" +
"id=" + id +
"\n, nome='" + nome + '\'' +
"\n, terminado=" + terminado +
"\n, precoTotal=" + precoTotal +
"\n, compras=" + compras +
"\n, comprador=" + comprador +
"\n, criadoEm=" + criadoEm +
'}';
}
}
package com.api.springboot.model;
import org.hibernate.annotations.ManyToAny;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import java.io.Serializable;
import java.time.*;
import java.util.Date;
@Entity
@Table(name = "compras")
public class Compra implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "produto_id")
private Produto produto = new Produto();
private int quantidade;
private float precoTotal;
@ManyToOne
@JoinColumn(name = "carrinho_id")
private Carrinho carrinho;
@OneToOne
private Promocao promocao;
@CreatedDate
private Date criadoEm = new Date();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public float getPrecoTotal() {
return precoTotal;
}
public void setPrecoTotal(float precoTotal) {
this.precoTotal = precoTotal;
}
public Date getCriadoEm() {
return criadoEm;
}
public Promocao getPromocao() {
return promocao;
}
public void setPromocao(Promocao promocao) {
this.promocao = promocao;
}
public void setCriadoEm(Date criadoEm) {
this.criadoEm = criadoEm;
}
public Carrinho getCarrinho() {
return carrinho;
}
public void setCarrinho(Carrinho carrinho) {
this.carrinho = carrinho;
}
@Override
public String toString() {
return "Compra{" +
"id=" + id +
", produto=" + produto +
", quantidade=" + quantidade +
", precoTotal=" + precoTotal +
", carrinho=" + carrinho +
", promocao=" + promocao +
", criadoEm=" + criadoEm +
'}';
}
}
´´´
´´´
package com.api.springboot.model;
import org.springframework.data.annotation.CreatedDate;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Date;
@Entity
@Table(name = "produtos")
public class Produto {
private static final long serialVersonUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nome;
private float preco;
private float peso;
private boolean tipo;
@ManyToOne
private Categoria categoria;
@CreatedDate
private Date criadoEm = new Date();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() { return nome; }
public void setNome(String nome) {
this.nome = nome;
}
public float getPreco() {
return preco;
}
public void setPreco(float preco) {
this.preco = preco;
}
public float getPeso() {
return peso;
}
public void setPeso(float peso) {
this.peso = peso;
}
public boolean isTipo() {
return tipo;
}
public void setTipo(boolean tipo) {
this.tipo = tipo;
}
public Date getCriadoEm() {
return criadoEm;
}
public Categoria getCategoria() {
return categoria;
}
public void setCategoria(Categoria categoria) {
this.categoria = categoria;
}
@Override
public String toString() {
return "Produto{" +
"id=" + id +
", nome='" + nome + '\'' +
", preco=" + preco +
", peso=" + peso +
", tipo=" + tipo +
", categoria=" + categoria +
", criadoEm=" + criadoEm +
'}';
}
}
These are the 3 main classes I will put only the trolley controller because if you help me with it I believe I can use logic for others.
package com.api.springboot.controllers;
import com.api.springboot.model.Carrinho;
import com.api.springboot.model.Compra;
import com.api.springboot.repository.CarrinhoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(value = "/api")
public class CarrinhoController {
@Autowired
CarrinhoRepository carrinhoRepository;
@GetMapping("/carrinhos")
public List<Carrinho> listarCompras(){
return carrinhoRepository.findAll();
}
@GetMapping("/carrinho/{id}")
public Carrinho carrinhoById(@PathVariable(value = "id") long id){
return carrinhoRepository.findById(id);
}
@PostMapping("/carrinho")
public Carrinho salvarCarrinho(@RequestBody Carrinho carrinho){
return carrinhoRepository.save(carrinho);
}
@DeleteMapping("/carrinho")
public void deletaCarrinho(@RequestBody Carrinho carrinho){
carrinhoRepository.delete(carrinho);
}
@DeleteMapping("/carrinho/{id}")
public void deletetById(@PathVariable(value = "id")long id){
carrinhoRepository.deleteById(id);
}
@PutMapping("/carrinho/put")
public Carrinho atualizarCarrinho(@RequestBody Carrinho carrinho){
return carrinhoRepository.save(carrinho);
}
@PostMapping("/teste/{id}")
public void add(@PathVariable(value = "id") long id , @RequestBody Compra x){
Carrinho instancia = carrinhoRepository.findById(id);
System.out.println(instancia);
System.out.println(x);
// instancia.add();
// carrinhoRepository.save(instancia);
// System.out.println("Rodou o dream do dream quero");
// System.out.println(instancia);
}
}
My question is , as I add a shopping cart . I tried to use the purchase x coming from the front as parameter and add it , only it comes null. Then a photo of how it arrives, I never used dependency injection and all tutoring teachers only use classes with attributes of type int,String, ...