1
Hello, I have two DTO classes (Categoriadto and Productodto) in a restfull application, how can I omit a certain attribute of Productodto when it is used in the Categoriadto class? Below follow the classes, the return in the Postman, and what I am wanting to accomplish. Grateful.
Categoriadto
package com.eclodir.voucomprei.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.eclodir.voucomprei.domain.Categoria;
public class CategoriaDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String descricao;
private String foto;
private List<ProdutoDTO> produtos = new ArrayList<>();
public CategoriaDTO() {}
public CategoriaDTO(Categoria obj) {
this.id = obj.getId();
this.descricao = obj.getDescricao();
this.foto = obj.getFoto();
this.produtos = obj.getProdutos().stream().map(x -> new ProdutoDTO(x)).collect(Collectors.toList());
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public List<ProdutoDTO> getProdutos() {
return produtos;
}
public void setProdutos(List<ProdutoDTO> produtos) {
this.produtos = produtos;
}
}
Product
package com.eclodir.voucomprei.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.eclodir.voucomprei.domain.Categoria;
import com.eclodir.voucomprei.domain.Produto;
public class ProdutoDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String descricao;
private String foto;
private String fabricante;
private String unidade;
private List<String> categorias = new ArrayList<>(); // Esta lista recebe as descrições das categorias
public ProdutoDTO() {
}
public ProdutoDTO(Produto obj) {
super();
this.id = obj.getId();
this.descricao = obj.getDescricao();
this.foto = obj.getFoto();
this.fabricante = obj.getFabricante();
this.unidade = obj.getUnd().getDescricao();
// Recebendo as descriçoes das categorias
for (Categoria x : obj.getCategorias()) {
if (x != null) {
categorias.add(x.getDescricao());
}
}
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public String getFabricante() {
return fabricante;
}
public void setFabricante(String fabricante) {
this.fabricante = fabricante;
}
public String getUnidade() {
return unidade;
}
public void setUnidade(String unidade) {
this.unidade = unidade;
}
public List<String> getCategorias() {
return categorias;
}
public void setCategorias(List<String> categorias) {
this.categorias = categorias;
}
}
Return to the category listing endpoint:
As you can see, in the return of entpoint each category shows its list of products, however, each product brings the categories that this is part of, This because the Productit contains this attribute that is important in other processes. Is there any way to omit the categories within the product detail? I am looking for an alternative that is not to create another DTO without this attribute to be used.
Hi, all right? Is there any way Jsonignore can be selective? For example, within an endpoint that returns a list the attribute is ignored, already in an endpoint that returns the object itself the attribute is displayed.
– Gonzaga Neto