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

为什么我在控制器中收到来自邮递员的null请求?

孔瑾瑜
2023-03-14

我已经编写了一个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。

但是,如果我在数据库中多创建一个列作为'id',并相应地更新实体类,将'id'作为主键并尝试执行,那么我将在请求体中获得正确的值,并且它也将保存在数据库中。

需要帮助。

共有1个答案

彭鸿哲
2023-03-14

由于我们将下划线字符视为保留字符,因此强烈建议遵循标准Java命名约定(即,在属性名称中不使用下划线,而是使用camel大小写)。

医生

下划线_是Spring数据查询派生中的一个保留字符,可以允许手动描述属性路径。

    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;

为了发现,我在IDE中粘贴了相同的代码,并发现实体Product缺少字段product_id的getter-setter。添加后,相同的代码将值保存到数据库中。但我仍然建议大家避免字段名称中的_in以避免进一步的问题,并遵循doc中的命名约定。在使用JPA时,例如findBy(实体中带有_in名称的东西),您可能会面临类似的问题

 类似资料:
  • 我在控制器[GET、POST和PUT]中编写了多个RESTendpoint。 接听和接听电话都很好。但当我试图点击来自Postman的PUT请求时,我的java控制器无法接收该请求。没有错误消息。响应主体为空。邮递员的回复代码是200。 以下是我的PUTendpoint,它无法从邮递员处获取请求: 下面是我的GETendpoint,它运行良好: 包含PUT请求标题和正文的邮递员URL为: 但是,系

  • 我正在编写一个具有交叉源配置的API 我的websecurity配置有 控制器类 身份验证过滤器检查 匹配。匹配总是变假 我是不是漏掉了什么? 我添加了什么额外的参数吗? 期待着迅速的回应。

  • 问题内容: 我使用Postman扩展程序发出GET请求并获得响应,但是如果我使用jQuery发出相同的请求,则会收到一个典型错误: XMLHttpRequest无法加载 http://www.rfen.es/publicacion/ranking/resultsBySwimmer.asp?l=020039535&t=&p=0&e=50L-I。所请求的资源上没有“ Access-Control-Al

  • 这是我的密码-------- 当我尝试对.post(/register…)路由进行邮递员测试时,它会暂停加载几分钟,然后给出错误-- “无法得到任何响应 连接到 http://localhost:5000/api/users/register 时出错。为什么会发生这种情况: 服务器无法发送响应:确保后端正常工作 自签名 SSL 证书被阻止:通过在“设置”中关闭“SSL 证书验证”来解决此问题 请求

  • 我正在考虑使用Postman来自动化我对REST API的测试,并且只使用了几天。到目前为止,我已经为我的初始集合创建了足够数量的请求。我还在请求前脚本、测试和请求正文中使用了全局、环境和集合变量。我希望控制请求中包含哪些属性,而无需复制同一请求的多个副本以排除某些属性。 例如,我有一个 JSON 请求正文,如下所示: 如果“OtherProperty”为空或为空,我想从请求中完全删除该属性。我只

  • 我有几个c#API Post和Get方法调用MSSQL数据库。我创建了数据库的副本和带有第二个连接字符串的API的副本-指的是新数据库。 在本机postman中,对旧API的调用工作正常,我得到的结果是200,但对新API的调用不断返回状态400,响应正文以:“System. NullReection ceException”开头在chrome postman中,所有API(旧的和新的)都工作正常