簡體   English   中英

為什么在控制器中從郵遞員請求中收到空值?

[英]Why am I receiving null from postman request in my controller?

我已經編寫了一個rest控制器,該控制器接收一個請求並將數據保存在db中。 這是我嘗試使用郵遞員發送的發帖請求

{
    "product_id" : "testproduct",
    "default_concurrent":10,
    "default_connections":1000,
    "msan":10
}

我的實體課:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;

import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Entity
@Table(name="products")
@EntityListeners(AuditingEntityListener.class)

public class Product {

    @Id
    @Column(name="product_id", nullable = false)
    private String product_id;

    @Column(name="default_concurrent", nullable = true)
    private int default_concurrent;

    @Column(name="default_connections", nullable = true)
    private int default_connections;

    @Column(name="msan", nullable = true)
    private int msan;



    public String getProduct() {
        return product_id;
    }

    public void setProduct(String product) {
        this.product_id = product;
    }

    public int getDefault_concurrent() {
        return default_concurrent;
    }

    public void setDefault_concurrent(int default_concurrent) {
        this.default_concurrent = default_concurrent;
    }

    public int getDefault_connections() {
        return default_connections;
    }

    public void setDefault_connections(int default_connections) {
        this.default_connections = default_connections;
    }

    public int getMsan() {
        return msan;
    }

    public void setMsan(int msan) {
        this.msan = msan;
    }


}

我的控制器:

    @PostMapping("/add")
    public Product addProduct(@Valid @RequestBody Product product) 
    {
        return productDao.saveProduct(product);
    }

錯誤:

ids for this class must be manually assigned before calling save()
nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.test.model.Product",

我在SO上瀏覽了很多與此錯誤有關的帖子,其中大多數建議使用

@GeneratedValue(strategy = GenerationType.AUTO)或@GeneratedValue(strategy = GenerationType.IDENTITY)

但我無法使用它,因為我的主鍵將是字符串,因此無法將其更改為Long。

調試時,我可以看到在請求正文中我收到的product_id為null。 其余屬性具有正確的值。

但是,如果我在數據庫中又創建了一個列作為“ Id”,並相應地更新Entity類,使“ Id”作為主鍵並嘗試執行,那么我將在請求正文中獲取正確的值,並將其保存為DB好。

需要幫忙。

因為我們將下划線字符視為保留字符,所以我們強烈建議您遵循以下標准Java命名約定(即,在屬性名稱中不使用下划線,而使用駝峰大小寫)。

文件

下划線_是Spring Data查詢派生中的保留字符 ,有可能允許手動描述屬性路徑。

堅持使用Java命名約定,即使用駝峰式大小寫作為成員變量名稱,一切都會按預期進行。

使用JPA功能時,您還將遇到問題。 因此,我建議更改命名約定。 更改

    private String product_id;
    private int default_concurrent;
    private int default_connections;
    private int msan;

至,

private String productId;
private int defaultConcurrent;
private int defaultConnections;
private int msan;

UPDATE1

為什么對於product_id僅為null

要發現我已經在IDE中粘貼了相同的代碼,並發現Entity Product缺少字段product_id的獲取方法 添加后,相同的代碼會將值保存到數據庫。 但我仍然建議大家避免在字段名稱使用_以避免進一步的問題並按照文檔的命名約定進行操作。 當使用JPA,如findBy(用的東西在_名的實體),你可能會面臨類似的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM