@PostMapping不工作-Java 17 Sping Boot

hvvq6cgz  于 2023-02-15  发布在  Java
关注(0)|答案(2)|浏览(187)

我在“SpringBootRestApi”应用程序中遇到@PostMapping问题。这是我遇到的唯一一个注解问题(@Get、@Put和@Delete工作正常)。我收到状态500(错误:内部服务器错误)。我做错了什么?
以下是我的@PostMapping:

@PostMapping
    public Product insert(@RequestBody Product product) {
        product.setProductId(null);
        productRepo.save(product);
        return product;
    }

它位于我的REST API类“ProductApi”中

@RestController
@RequestMapping("/products")
public class ProductApi {

    private ProductRepo productRepo;

    public ProductApi(ProductRepo productRepo) {
        this.productRepo = productRepo;
    }

以防我也要粘贴我的存储库类

@Repository
public interface ProductRepo extends JpaRepository<Product, Integer> {
//    Ignore these:
//    List<Product> findByProductName(String name);
//    List<Product> findByProductNameContainingIgnoringCase(String name);
//    List<Product> findByProductNameContainingIgnoringCaseAndPriceBetween(String name, BigDecimal min, BigDecimal max);
//    List<Product> findByPriceBetween(BigDecimal min, BigDecimal max);
}

我已经在PGadmin 4(PostgreSQL)中创建了我的数据库表。
有一个模型类叫做Product:

@Entity
@Table(name="products")
@NamedQuery(name="Product.findAll", query="SELECT p FROM Product p")
public class Product implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="product_id", insertable=false, updatable=false)
    private Integer productId;

    @Column(name="product_name")
    private String productName;

    private BigDecimal price;

    private BigDecimal vat;

    private String description;

    public Product() {
    }

//    public Product(Integer productId, String productName, BigDecimal price, BigDecimal vat, String description) {
//        this.productId = productId;
//        this.productName = productName;
//        this.price = price;
//        this.vat = vat;
//        this.description = description;
//    }

    public Integer getProductId() {
        return this.productId;
    }

    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    public String getProductName() {
        return this.productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public BigDecimal getPrice() {
        return this.price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public BigDecimal getVat() {
        return this.vat;
    }

    public void setVat(BigDecimal vat) {
        this.vat = vat;
    }

    public String getDescription() {
        return this.description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

以下是日志的内容:

2023-02-12T11:16:27.581+01:00 WARN 29916 --- [nio-8081-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 23502 2023-02-12T11:16:27.581+01:00 ERROR 29916 --- [nio-8081-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: null value in column "product_id" of relation "products" violates not-null constraint

Details: Failing row contains (null, XDDD, 69.69, 0.23, XDXDXD).

2023-02-12T11:16:27.583+01:00 ERROR 29916 --- [nio-8081-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [product_id" of relation "products]] with root cause

org.postgresql.util.PSQLException: ERROR: null value in column "product_id" of relation "products" violates not-null constraint

Details: Failing row contains (null, XDDD, 69.69, 0.23, XDXDXD).

甚至当我把这个放在评论中(在我的@PostMapping)://product.setProductId(null);我仍然收到相同的错误。
我想当我@Post一些东西时,我不需要输入{id} --这是无用的。我或其他人如何需要知道下一条记录需要什么“productId”?这应该递增。

jgwigjjp

jgwigjjp1#

org.postgresql.util.PSQLException:错误:关系"products"的列"product_id"中的空值违反了非空约束
错误消息表明"products"表中的"product_id"列不能包含空值,但您正试图为该列插入空值。
请尝试传递有效值,不能为null。

oogrdqng

oogrdqng2#

我可以在你的代码中看到你手动将productId设置为null。因为你使用的是自动生成策略,所以请不要手动将产品Id设置为null。所以请删除该行产品。setProductId(null)。这里是我的github中的一个示例项目,它可能会帮助你正确地处理crud。我的git hub帐户中有很多CRUD操作的示例。https://github.com/alimjz/product-REST

相关问题