Olá…
Estou tentando retornar um simples json, porem como estou usando embedded, o resultado vem “fragmentado”, mas gostaria que viesse um objeto unico. Alguma dica??
o resultado esta vindo assim
[
{
"authorsId": {
"firstName": "Merritt",
"lastName": "Eric"
},
"middleName": null
}
]
mas gostaria que viesse assim:
[
{
"firstName": "Merritt",
"lastName": "Eric",
"middleName": null
}
]
minha classe embedded
@Embeddable
@Data
public class AuthorsId implements Serializable {
private static final long serialVersionUID = 1L;
private String firstName;
private String lastName;
public AuthorsId() {
}
public AuthorsId(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
e minha classe de dominio
@Entity
@Data
@Table(name = "authors")
public class Authors {
@EmbeddedId
private AuthorsId authorsId;
private String middleName;
}
Evite retornar a entidade JPA diretamente na API. Isso pode te causar vários problemas.
O melhor é transformar a entidade para uma estrutura simples com os dados que vc precisa, uma forma de fazer é assim:
public class AuthorResource {
private final String firstName;
private final String lastName;
private final String middleName;
public AuthorResource(Author author) {
this.firstName = author.getAuthorsId().getFirstName();
this.lastName = author.getAuthorsId().getLastName();
this.middleName = author.getMiddleName();
}
// cria apenas os getter nessa classe
// ela deve ser construída apenas pelo construtor
}
Exemplo de como usar:
Author author = recuperarAuthorPorId(authorId);
return new AuthorResource(author);
Retorne uma instancia dessa AuthorResource
e vc não terá problemas, pois o código usado pelos endpoints ficará desacoplado das suas entidades, ou seja, uma coisa alterada em um lugar não irá impactar no outro.
Reparei que vc usou o nome da entidade no plural: Authors. Como a entidade representa apenas um author por vez, faz mais sentido ela ter o nome no singular: Author.
1 curtida