Editar retorno JSON

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