Java 在json中Spring多对一

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

您好,可以在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<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。