对于同一模型类的第二次序列化的所有实例,对象仅具有它们应该具有的一部分属性及其各自的值。这样,JSON 文件结构就不像应用程序的旧部分(前端)所期望的那样同质化和统一。
[
{
"id": 1,
"fornecedor": {
"cnpj": "80000876000177",
"nome": "ATACADÃO DIA-A-DIA"
},
"itens": [
{
"id": 2,
"produto": {
"gtin": "7891991010856",
"nome": "CERVEJA BUDWEISER"
},
"quantidade": 3,
"preco": 3.5,
"total": 10.5
}
]
},
{
"id": 3,
"fornecedor": {
"cnpj": "19600347000101",
"nome": "SUPERMERCADO BELLA-VIA"
},
"itens": [
{
"id": 4,
"produto": {
"gtin": "7891991010857",
"nome": "CERVEJA HEINEKEN"
},
"quantidade": 4,
"preco": 5.4,
"total": 21.6
}
]
},
{
"id": 5,
"fornecedor": "19600347000101",
"itens": [
{
"id": 6,
"produto": "7891991010856",
"quantidade": 4,
"preco": 3.2,
"total": 12.8
}
]
},
{
"id": 7,
"fornecedor": "80000876000177",
"itens": [
{
"id": 8,
"produto": "7891991010857",
"quantidade": 5,
"preco": 4.9,
"total": 24.5
}
]
}
]
在上面的 JSON 中,id:1 和 id:7 的实例有一个名为fornecedor
结构不同的字段,这不应该是因为前端期望它们相同。其他示例是带有字段的 id:2 和 id:6produto
等等。
上面的 JSON 是下面模型类列表的序列化Pedido
:
@Data
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Pedido {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonView(View.External.class)
private Long id;
@ManyToOne
@JoinColumn(name = "fornecedor_cnpj")
@JsonView(View.External.class)
private Fornecedor fornecedor;
@OneToMany(mappedBy = "pedido", fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@JsonView(View.External.class)
private List<Item> itens;
public List<Item> getItens() {
if(itens == null){
itens = new ArrayList<>();
}
return itens;
}
}
模型类Fornecedor
是:
@Data
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "cnpj")
public class Fornecedor {
@Id
@JsonView(View.External.class)
private String cnpj;
@JsonView(View.External.class)
private String nome;
@OneToMany(mappedBy = "fornecedor", fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@JsonView(View.Internal.class)
private List<Pedido> pedidos;
@OneToMany(mappedBy = "fornecedor", fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@JsonView(View.Internal.class)
private List<Disponibilidade> disponilidades;
}
模型类Produto
是:
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "gtin")
@NoArgsConstructor
@Data
public class Produto {
@Id
@JsonView(View.External.class)
private String gtin;
@JsonView(View.External.class)
private String nome;
@OneToMany(mappedBy = "produto", fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@JsonView(View.Internal.class)
private List<Disponibilidade> disponibilidades;
public Produto(String gtin) {
this.gtin = gtin;
}
}
问题:JSON 的结构是预期行为的表示?如果是这样,有人可以告诉我如何使第一个实例中的所有实例始终具有具有各自值的所有属性(这意味着重复的属性和值!)。
谢谢!