簡體   English   中英

一個字段未保存到數據庫中,始終返回為 0.0

[英]One Field is not getting saved to the database, always returns as 0.0

我試圖將產品實體保存在 postgres 表中,如果我從 postman 發送請求,它返回 sved object,但 MRP 字段始終為 0.0

實體 class:

package com.acms.models;

import java.time.Instant;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "product")
public class Product {
    @Id
    @Column(name = "productid")
    private String productId;
    @Column(name = "timestamp")
    private long timeStamp;
    private String description;
    private String name;
    @Column(name = "mrp")
    private double mRP;
    private int quantity;
    private double promotion;

    public Product() {
        super();
        long epochTime = Instant.now().getEpochSecond();
        this.timeStamp = epochTime;
    }

    public String getProductId() {
        return productId;
    }

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

    public String getDescription() {
        return description;
    }

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

    public String getName() {
        return name;
    }

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

    public double getMRP() {
        return mRP;
    }

    public void setMRP(double mRP) {
        this.mRP = mRP;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public double getPromotion() {
        return promotion;
    }

    public void setPromotion(double promotion) {
        this.promotion = promotion;
    }

    @Override
    public String toString() {
        return "Product [productId=" + productId + ", timeStamp=" + timeStamp + ", description=" + description
                + ", name=" + name + ", MRP=" + mRP + ", quantity=" + quantity + ", promotion=" + promotion + "]";
    }
}

Controller:

@PostMapping("/product/save")
    public Product postDataToProductTable(@RequestBody Product product) {
        return this.productService.postDataToProductTable(product);
    }

服務:

public Product postDataToProductTable(Product product) {
        return this.productRepository.save(product);
    }

使用 url 和 object 發送的請求:

http://localhost:8080/product/save
{
    "productId":"p106",
    "description":"butter",
    "name":"amul",
    "mRP":"200",
    "quantity":"8",
    "promotion":"5.0"
}

Object 返回:

{
    "productId": "p106",
    "description": "butter",
    "name": "amul",
    "quantity": 8,
    "promotion": 5.0,
    "mrp": 0.0
}

請注意上面的情況,mrp 返回為 0.0,但所有其他字段都很好。

postgres 中的表格:

CREATE TABLE product (
    serialNumber SERIAL,
    productID VARCHAR(50) NOT NULL,
    timeStamp bigint NOT NULL,
    description VARCHAR(50),
    name VARCHAR(50) NOT NULL,
    MRP NUMERIC NOT NULL,
    quantity int NOT NULL,
    promotion NUMERIC,
    PRIMARY KEY(productID),
    UNIQUE(productID, timeStamp)
);

可能是因為您的 JSON 請求將 mRP 作為 String 類型發送,但在您的 model 中它被定義為double 在 JSON 請求中丟失 mRP 值周圍的"" ,看看是否有幫助。

另一種選擇是您在數據庫中將此類型定義為numeric ,但在 model 中它是double 根據我的經驗,我更喜歡使用BigDecimal到 map 到 postgres 中的numeric字段。 但是,如果它必須是 model 中的double精度數,那么為什么不在數據庫中也使用它作為類型呢? 並非可以保存在numeric字段中的所有內容實際上都可以在 Java double中表示。

Postgres 數據類型: https://www.postgresql.org/docs/9.1/datatype-numeric.html

此外(來自評論討論)Json 和 model 中的字段名稱之間的大小寫不一致,如果使用 Spring Data JPA/Spring MVC,可能會導致問題。

暫無
暫無

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

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