当前位置: 首页 > 知识库问答 >
问题:

spring boot列表中的Getters和setters

爱刚捷
2023-03-14

我正在spring boot创建我的API。我认为一个产品是由以下部件组成的:

这里是我的代码:(实体层)

import javax.persistence.*;
import java.util.List;
import java.util.ArrayList;

@Table
@Entity
public class Product{
   @Id @GeneratedValue
   private Long id;
   private String name;
   @OneToMany
   @JoinColumn
   private List<Component> productComponents = new ArrayList<>();

   //default constructor
   public Product(){

   }
   
   public Product(Long id, String name, List<Component> productComponents){
      this.id = id;
      this.name = name;
      this.productComponents = productComponents;
   }

  //getters
  public Long getId(){
     return this.id;
  }

  public String getName(){
     return this.name;
  }

  public List<Component> getProductComponents(){
     return this.productComponents;
  }


  //setters
  public void setId(Long id){
     this.id = id;
  }

 public void setName(String name){
    this.name = name;
 }

 public void setProductComponents(List<Component> productComponents){
    this.productComponents = productComponents;
 }

}

下面是我的Controller类:

package com.accounting.accounting.Controller;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/api/products/product")
public class ProductController {
    private static ProductRepository myProductRepository;

    @GetMapping("/get/all")
    public List<Product> listProducts(){
        return myProductRepository.findAll();
    }


    @PostMapping("/new")
    public Product createNewProduct(@RequestBody Product myProduct){
       return myProductRepository.save(myProduct);
    }

    @PutMapping("/update/{id}")
    public Product updateProduct(@RequestBody Product myProduct, @PathVariable Long id){
        return myProductRepository.findById(id).map((product) ->{
           product.setName(myProduct.getName());
           product.setProductComponents(myProduct.getProductComponents());
        return myProductRepository.save(product);
    }).orElseGet(() ->{
       myProduct.setId(id);
       return myProductRepository.save(myProduct);
    });
}

}

我的问题:

在实体类“Product”中,对于类型为List的productComponents变量,getter和setter应该如上面所述,还是应该如下所示:

 public List<Component> getProductComponents(){
     return this.productComponents;
  }

 public void setProductComponents(Component productComponent){
    this.productComponents.add(productComponent);
 }

并将controller类中的update方法更改为:

    @PutMapping("/update/{id}")
    public Product updateProduct(@RequestBody Product myProduct, @PathVariable Long id){
        return myProductRepository.findById(id).map((product) ->{
           product.setName(myProduct.getName());
           product.setProductComponents((Component) myProduct.getProductComponents());
        return myProductRepository.save(product);
    }).orElseGet(() ->{
       myProduct.setId(id);
       return myProductRepository.save(myProduct);
    });
}

还是有更好的解决方案?

共有2个答案

林烨烨
2023-03-14

我更喜欢第一个。理性存在

  1. 我可以通过传递组件列表轻松创建初始对象
product.setProductComponents((Component) myProduct.getProductComponents())

GetProductComponents我假设很好地返回列表。这样做是行不通的

更好的主意是欢快的getter和setter dumbest。优点是您可以在将来使用lombok这样的库时省略它们

并且始终可以添加实用程序方法

潘璞瑜
2023-03-14

我建议

public List<Component> getProductComponents(){
    return this.productComponents;
}

public void setProductComponents(List<Component> productComponents){
    this.productComponents = productComponents;
}

另外为了方便起见:

public void addProductComponent(Component component) {
   this.productComponents.add(component);
}

public void removeProductComponent(Component component) {
   this.productComponents.remove(component);
}
 类似资料:
  • 我不熟悉java和springboot。我正在尝试使用springboot创建一个CRUD应用程序。我使用MySQL存储数据。 员工模式- 员工资源库- 员工控制员- 上面的控制器在JSON对象数组表单中给出了结果,如下所示 但我需要以下表格的回复 非常感谢你的帮助。

  • 对于此代码 kotlin编译器生成: 即使属性没有自定义getter或setter。可以使用注释删除冗余的get和set方法。所以这段代码 仅生成一个字段,无需其他方法。 但是有没有办法让kotlin编译器不为整个项目中的所有属性生成getter和setter?不管它是否有注释。也许是一些实验性编译器标志? 我想要它是因为我在kotlin上编写了android仪器测试。测试apk超过65k方法计数

  • 如何将YAML列表加载到Spring框架项目中的Java列表(没有springboot)? 我看到它在springboot项目中与一起工作。但我无法让它在纯spring框架项目中使用。似乎注释无法正确解析列表。 下面是一个示例项目:https://github.com/KiranMohan/spring-yaml. 为了加载yaml文件,我使用了。 代码在jUnit类中进行测试。 输出is 示例y

  • 在上面的例子中,让吸气剂同步有什么意义吗?

  • 有时,我们可能需要基于 store 中的状态来计算推导状态,例如过滤一个项目列表,并对过滤结果进行计数: computed: { doneTodosCount () { return this.$store.state.todos.filter(todo => todo.done).length } } 如果多个组件需要用到这个推导后的状态,那我们就必须到处重复写该计算属性函数;或者将其