Java 在json中Spring多对一
您好,可以在json中添加映射值吗 产品实体Java 在json中Spring多对一,java,spring,spring-boot,hibernate,jpa,Java,Spring,Spring Boot,Hibernate,Jpa,您好,可以在json中添加映射值吗 产品实体 @Id @Column(unique = true) @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(unique = true) private String title; private String description; @OneToMany(fetch = FetchType.LAZY) private List<Opti
@Id
@Column(unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(unique = true)
private String title;
private String description;
@OneToMany(fetch = FetchType.LAZY)
private List<Options> options= new ArrayList<>();
我得到的是
{
"id": 2,
"price": 300.00,
"discount": 35.00
},
我想要的是
{
"id": 2,
"price": 300.00,
"discount": 35.00,
"product":[
"id": 2,
"title": "dsfa",
"description": "dsfa",
....
]
},
我想将产品添加到json响应中,如何实现这一点?一个产品有多个选项,反之亦然? 在您的代码中,一个产品有许多选项 但是,如果关系正确,获得自定义结果的更好方法是使用DTO 使用DTO,您可以创建包含所需所有详细信息的自定义类,例如: 生产的
private Integer id;
private String title;
private String description;
getter / setter
选择
private Integer id;
private BigDecimal price=new BigDecimal(0);
private BigDecimal discount=new BigDecimal(0);
private List<Product> products;
getter / setter
私有整数id;
私有BigDecimal价格=新的BigDecimal(0);
私有BigDecimal折扣=新的BigDecimal(0);
私人上市产品;
吸气剂/塞特
Soo,首先使用服务检索数据,然后设置DTO
之后,您可以向您发送数据并获取自定义Json。一个产品有多个选项,反之亦然? 在您的代码中,一个产品有许多选项 但是,如果关系正确,获得自定义结果的更好方法是使用DTO 使用DTO,您可以创建包含所需所有详细信息的自定义类,例如: 生产的
private Integer id;
private String title;
private String description;
getter / setter
选择
private Integer id;
private BigDecimal price=new BigDecimal(0);
private BigDecimal discount=new BigDecimal(0);
private List<Product> products;
getter / setter
私有整数id;
私有BigDecimal价格=新的BigDecimal(0);
私有BigDecimal折扣=新的BigDecimal(0);
私人上市产品;
吸气剂/塞特
Soo,首先使用服务检索数据,然后设置DTO
发送数据并获取自定义Json后。是的,只需使用
@JsonIgnoreProperties
@Id
@Column(unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(unique = true)
private String title;
private String description;
@OneToMany(fetch = FetchType.LAZY)
@JsonIgnoreProperties(value = {"product"})
private List<Options> options= new ArrayList<>();
您将避免json结果中的无限循环,并获取所有引用对象(关系)。是的,只需使用
@JsonIgnoreProperties
@Id
@Column(unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(unique = true)
private String title;
private String description;
@OneToMany(fetch = FetchType.LAZY)
@JsonIgnoreProperties(value = {"product"})
private List<Options> options= new ArrayList<>();
您将避免json结果中的无限循环,并获取所有引用对象(关系)。您是否尝试删除@JsonIgnore?使用
@JsonIgnoreProperties({“options”})
而不是@JsonIgnore
在选项类中的产品
字段中选择正确的关系映射。我认为您不应该直接将模型返回为DTO,这是由Jackson将对象转换为Json时的无限循环造成的。您应该使用希望通过响应返回到客户端的字段定义DTO,而不需要在两个实体中使用注释@JSONIGNOREPORTIES({“选项”})或@JsonIgnore。您是否尝试删除@JsonIgnore?使用@JSONIGNOREPORTIES({“选项”})
而不是选项类中的@JsonIgnore
字段上的正确的关系映射。我认为您不应该直接将模型返回为DTO,这是由Jackson将对象转换为Json时的无限循环造成的。您应该使用希望通过响应返回给客户机的字段定义DTO,而无需在这两个实体中使用注释@JsonIgnoreProperties({“options”})或@JsonIgnore。