[英]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.