Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 过滤嵌套实体spring boot中的响应_Java_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java 过滤嵌套实体spring boot中的响应

Java 过滤嵌套实体spring boot中的响应,java,spring-boot,jpa,spring-data-jpa,Java,Spring Boot,Jpa,Spring Data Jpa,我通过以下方式设置了与Product-Cart的实体关系: Product.java @Entity(name="Product") @Getter @Setter public class Product implements Serializable { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; p

我通过以下方式设置了与Product-Cart的实体关系:

Product.java

@Entity(name="Product")
@Getter
@Setter
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private String name;
    private String description;
    private int amount;
    private String unit;
    private double price;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn()
    private Cart cart;
}
@Entity(name="Cart")
@Getter
@Setter
public class Cart implements Serializable {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;
    @OneToMany(
            mappedBy="cart",
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    private List<Product> shoppingList  = new ArrayList<>();
    private boolean payed = true;
}
Cart.java

@Entity(name="Product")
@Getter
@Setter
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    private String name;
    private String description;
    private int amount;
    private String unit;
    private double price;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn()
    private Cart cart;
}
@Entity(name="Cart")
@Getter
@Setter
public class Cart implements Serializable {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Long id;
    @OneToMany(
            mappedBy="cart",
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    private List<Product> shoppingList  = new ArrayList<>();
    private boolean payed = true;
}
如您所见,我只需要将产品ID金额放在购物列表中(两者都来自于我建立实体关系的product

这就是我提出POST请求的方式:

 @PostMapping()
    @ResponseStatus(HttpStatus.CREATED)
    public Cart addProduct() {
        return new Cart(this.service.create());
    }
这就是我的服务逻辑:

 @Override
    public Cart create() {
        Cart c = new Cart();
        c.setPayed(false);
        return this.repository.save(c);
    }

这就是我需要帮助以某种方式制作c.setShoppingList(???)以从产品中获取id数量,但是只有这两个

IMO将实体直接序列化到客户端是一种不好的、潜在危险的做法。它混合了关注点(实体关注点=如何持久化此内容,DTO关注点=如何序列化此内容),并可能泄漏信息(有人向客户端不应看到的实体添加字段,例如电子邮件、密码,但此实体已序列化且电子邮件泄漏)。我知道它很方便,到处都用,但我仍然认为它不好。在您的情况下,我将为购物车创建一个DTO,其中包含产品的DTO,并且只包含必需的字段;可能是Jackson,所以请查看
@JsonIgnore
,通常,它如何限制发送给客户端的字段,例如。Jackson非常丰富,您可能会发现其他更适合您需要的方法。您可以创建响应对象(根据响应json的java类),并使用getter setters将其作为响应实体返回。