Procurei em todos os post's e não achei nada a respeito. Simplemente ele realiza e requisição porém não salve e retorna o id nulo
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Procurei em todos os post's e não achei nada a respeito. Simplemente ele realiza e requisição porém não salve e retorna o id nulo
TopicoController
@PutMapping("/{id}")
public ResponseEntity<TopicoDTO> atualizarPUT(@PathVariable Long id, @RequestBody @Valid AtualizacaoTopicoForm form) {
Topico topico = form.atualizarFormPUT(id, topicoRepository);
return ResponseEntity.ok(new TopicoDTO(topico));
}
AtualizacaoTopicoForm
package br.com.springboot.API.forum.controller.form;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import br.com.springboot.API.forum.modelo.Topico;
import br.com.springboot.API.forum.repository.TopicoRepository;
public class AtualizacaoTopicoForm {
/**
* @NotNull - Não pode estar nulo
* @NotEmpty - Não pode ser uma String vazia
* @Length - Limite de caracteres
*/
@NotNull @NotEmpty @Length(min = 10)
private String titulo;
@NotNull @NotEmpty @Length(min = 20)
private String mensagem;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
/**
* Método que atualiza um registro por id. A classe que chama ele
* atualizarPUT de TopicoController ja vai receber os dados titulo
* e mensagem na requisição. Ao chegar aqui recebem o novo valor
* definido para realizar o update e deixar os novos dados prontos
* para fazer o update.
*
* @param id
* @param topicoRepository
* @return
*/
public Topico atualizarFormPUT(Long id, TopicoRepository topicoRepository) {
Topico topico = topicoRepository.getOne(id);
topico.setTitulo(this.titulo);
topico.setMensagem(this.mensagem);
return topico;
}
}
Entidade Topico
package br.com.springboot.API.forum.modelo;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
public class Topico {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
private String mensagem;
private LocalDateTime dataCriacao = LocalDateTime.now();
@Enumerated(EnumType.STRING) // para a jpa armazenar o nome do enum e não a representação numérica da ordem em que está declarada
private StatusTopico status = StatusTopico.NAO_RESPONDIDO;
@ManyToOne
private Usuario autor;
@ManyToOne
private Curso curso;
@OneToMany(mappedBy = "topico")
private List<Resposta> respostas = new ArrayList<>();
public Topico() {}
public Topico(String titulo, String mensagem, Curso curso) {
this.titulo = titulo;
this.mensagem = mensagem;
this.curso = curso;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Topico other = (Topico) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public LocalDateTime getDataCriacao() {
return dataCriacao;
}
public void setDataCriacao(LocalDateTime dataCriacao) {
this.dataCriacao = dataCriacao;
}
public StatusTopico getStatus() {
return status;
}
public void setStatus(StatusTopico status) {
this.status = status;
}
public Usuario getAutor() {
return autor;
}
public void setAutor(Usuario autor) {
this.autor = autor;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
public List<Resposta> getRespostas() {
return respostas;
}
public void setRespostas(List<Resposta> respostas) {
this.respostas = respostas;
}
}
Persebi que a JPA gera as tabelas com id's normal, porém quando faço get ou post o campo id está vindo nulo "id":"null"
Oi Bruno,
No seu controller o objeto que você retorna é o TopicoDto, posta aqui então essa sua classe.
Rodrigo, pode desconsiderar, eu optei por baixar o seu projeto mesmo e dar continuidade por ele. E quando fui testar ele rodou perfeitamente. É quase 100% de chances que eu deixei de colocar algum detalhe. Muito obrigado pelo seu retorno !!!