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

无法使用Spring rest数据mvc发布具有一对一HAL链接的实体

仲孙思源
2023-03-14

我试图用OneToOnenullable=false与用户实体的关系保存诊所实体。

诊所实体:

//....Some fields
@OneToOne(optional=false,fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@NotNull
private User user; 
//.. Getters & Setters

用户实体

//....Some fields
@OneToOne(fetch = FetchType.LAZY,mappedBy="user",cascade=CascadeType.ALL,orphanRemoval = true)
private Clinic clinic;
//.. Getters & Setters

>

  • 成功发布用户。

     curl -i -X POST -H "Content-Type: application/json" -d '{"firstName" : "Khaled","lastName" : "Lela","userName" : "KhaledLela","password" : "128ecf542a35ac5270a87dc740918404","email" : "example@gmail.com", "phone" : "12345678","gender" : "MALE", "level" : "ADMIN"}' http://localhost:8080/clinicfinder/api/user
    
    HTTP/1.1 201 Created
    Server: Apache-Coyote/1.1
    Location: http://localhost:8080/clinicfinder/api/user/4
    Content-Type: application/hal+json;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Thu, 20 Apr 2017 12:26:41 GMT
    
    {
      "token" : null,
      "firstName" : "Khaled",
      "lastName" : "Lela",
      "userName" : "KhaledLela",
      "password" : "128ecf542a35ac5270a87dc740918404",
      "email" : "example@gmail.com",
      "phone" : "12345678",
      "gender" : "MALE",
      "level" : "ADMIN",
      "birthDate" : null,
      "createDate" : null,
      "updateDate" : null,
      "_links" : {
    "self" : {
      "href" : "http://localhost:8080/clinicfinder/api/user/4"
    },
    "user" : {
      "href" : "http://localhost:8080/clinicfinder/api/user/4"
    },
    "clinic" : {
      "href" : "http://localhost:8080/clinicfinder/api/user/4/clinic"
    }
      }
    }
    

    无法使用用户链接发布诊所

    curl -i -X POST -H "Content-Type: application/json" -d '{"name":"clinc","address":"address","city":"city","area":"area","user":"http://localhost:8080/clinicfinder/api/user/2"}' http://localhost:8080/clinicfinder/api/clinic
    

    违反约束的列表:[ConstraintViolationImpl{interpolatedMessage='可能不是null',属性Path=用户,rootBeanClass=类com.domain.entity.诊所,消息模板='{javax.validation.constraints.NotNull.message}'}]

    >

    @RepositoryRestResource(path = "clinic")
    public interface ClinicRepo extends CrudRepository<Clinic, Long> {}
    

    波姆

       <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
        <spring.data.jpa.version>1.11.1.RELEASE</spring.data.jpa.version>
    <spring.data.rest.webmvc.version>2.6.1.RELEASE</spring.data.rest.webmvc.version>
       </properties>
    <dependencies>
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- Spring Rest Repository -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${spring.data.jpa.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>${spring.data.rest.webmvc.version}</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.10.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>
    
  • 共有1个答案

    陈季
    2023-03-14

    感谢@Alan Hay,我的错我错过了添加setUser()

    添加后,他们工作像一个魅力,...

    curl -i -X POST -H "Content-Type: application/json" -d '{"name":"clinc","address":"address","city":"city","area":"area","user":"http://localhost:8080/clinicfinder/api/user/2"}' http://localhost:8080/clinicfinder/api/clinic
    
    HTTP/1.1 201 Created
    Server: Apache-Coyote/1.1
    Location: http://localhost:8080/clinicfinder/api/clinic/1
    Content-Type: application/hal+json;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Thu, 20 Apr 2017 15:59:16 GMT
    
    {
      "name" : "clinc",
      "address" : "address",
      "city" : "city",
      "area" : "area",
      "longitude" : null,
      "latitude" : null,
      "createDate" : null,
      "updateDate" : null,
      "doctors" : [ ],
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/clinicfinder/api/clinic/1"
        },
        "clinic" : {
          "href" : "http://localhost:8080/clinicfinder/api/clinic/1"
        },
        "user" : {
          "href" : "http://localhost:8080/clinicfinder/api/clinic/1/user"
        }
      }
    }
    

     类似资料:
    • 我试图通过提交一个表单来使用。NET CORE MVC提出一个POST请求。从视图中成功进行调用,如下所示: 我的控制器代码如下所示: formId参数通过fine传递并设置为63,但是report filters对象(如下)只是。如果有关系,课程如下: 到目前为止,我已经阅读了这篇文章和这篇帖子。我尝试从模型中删除属性--没有帮助。我尝试将和预挂起到控制器参数,结果出现了一个415 http错误

    • 问题内容: 我正在尝试使用以下方法将使用jQuery Ajax的数据发布到MVC动作。但是在控制器内部,所有模型属性始终都是。不知道我在这里想念的是什么。 .CSHTML 的JavaScript 控制者 模型 EDIT1 我已经添加了上面的模型。单击保存后,此处显示序列化数据和JSON 数据。 序列化数据 后 我尝试添加属性和没有运气的属性。 我认为不必将返回类型从更改为。 该URL也是正确的,因

    • 我的两个实体有一对一的关系 我尝试通过此方法删除我的用户实体 PasswordResetTokenRepository类,我在服务方法中调用了该类,用于删除用户,我使用了常规Hibernate方法deleteById(Long id) 但是当我尝试通过此方法删除时,出现此错误:not-null 属性引用 null 或瞬态值:kpi.diploma.ovcharenko.entity.user.Pa

    • 问题内容: 我正在使用Spring Data Rest。我在尝试发布具有关联的对象时遇到问题(例如,address是我实体中的一个字段,该字段被映射为多个)。 问题是,我们应使用哪种格式将新实体与其关系联系起来。我看到了几个答案,并尝试了所有发现的选项。不幸的是,他们都不适合我。发生以下错误: 我尝试过的JSON: 还尝试了以下方法: 和这个: 甚至这样: 有没有办法做到这一点,或者只为POST编

    • 我正在尝试使用Google Dataflow和Apache Beam SDK 2.6.0的PubSub实现一次性交付。 用例非常简单: 'Generator'数据流作业将1M消息发送到PubSub主题。 “存档”数据流作业从PubSub订阅中读取消息,并保存到Google云存储中。 我在 Pubsub.IO.Write(“生成器”作业)和 PubsubIO.Read(“存档”作业)中都添加了“带

    • 如果你有这样的课,有没有可能 首先从android上传图像,该图像保存在firebase存储中。在下一步中,您将发布您的姓名、年龄和上次上传图像使用的存储空间,并将此图像与姓名和年龄链接 举个例子 姓名:'John' 年龄:50 url:firebase url图像