1
resposta

API Rest com Spring Boot

Olá pessoal,

Estou fazendo uns videos sobre API Rest com Spring Boot e até agora fiz exemplos báśicos e quando tentei aumentar a complexidade estou apanhando.

Minha ideia é no Post /classe, criar uma nova classe com alunos recebendo o seguinte json:

{
  "nome": "Primeira Serie - A".
  "alunos": [
    "João",
    "José",
    "Maria"
  ]
}

E o retornar:

{
  "id_classe": 101
}

Acontece que ele salva a classe, mas não salva os alunos e não tenho a ideia de como mostar somente o id da classe.

Criei as seguintes classes em Java:

Model Classe.java

package com.example.classe.model;

//Import's suprimidos

@Entity
@Table(name = "classe")
public class Classe {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String nome;

    @OneToMany(mappedBy = "classe")
    private Set<Aluno> alunos = new HashSet<Aluno>();    

    //Get's e Set's suprimidos
}

Aluno.java

package com.example.classe.model;

//Import's suprimidos

@Entity
@Table(name = "aluno")
public class Aluno {

    private static int tempID = 0;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String nome;

    @ManyToOne
    @JoinColumn(name = "id_classe")
    @JsonBackReference
    private Classe classe;

    public Aluno(String nome) {
        tempID++;
        this.id = tempID;
        this.nome = nome;
    }

    public Aluno() {
    }

    //Get's e Set's suprimidos    

}

Repository ClasseRepository.java

package com.example.classe.repository;

//Import's suprimidos

@Repository
public interface ClasseRepository extends JpaRepository<Classe, Integer> {

    public List<Classe> findAll();

}

Controller ClasseController.java

package com.example.classe.controller;

//Import's suprimidos

@RestController
@RequestMapping("/classe")
public class ClasseController {

    @Autowired
    private ClasseRepository classeRepo;

    @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<Collection<Classe>> getClasse() {
        return new ResponseEntity<>(classeRepo.findAll(), HttpStatus.OK);
    }

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<?> salvarClasse(@RequestBody Classe classe) {
        return new ResponseEntity<>(classeRepo.saveAndFlush(classe), HttpStatus.CREATED);
    }

}

Será que estou fazendo tudo errado ou não entendi o conceito? Mas queria entender como fazer dessa forma.

Desde já Obrigado.

1 resposta

Oi Cesar,

Uma coisa que notei é que no seu json tem um array de String com nomes de alunos, enquanto no seu modelo Classe você tem uma coleção do modelo Aluno, ou seja, diferente do seu json. Eu tentaria enviar algo no array como:

"alunos": [
    {"nome": "João"},
    {"nome": "José"}
  ]