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

spring data rest kotlin协会POST

裘嘉树
2023-03-14

我遵循了教程http://www.baeldung.com/spring-data-rest-relationships。我还注意到,我可以通过提供到关系的链接直接创建关联。

curl -i -X POST -H "Content-Type:application/json" -d '{"name":"My Library"}' http://localhost:8080/libraries
curl -i -X POST -d '{"title":"Books", "library":"http://localhost:8080/libraries/1"}' -H "Content-Type:application/json" http://localhost:8080/books

但是,如果我在Kotlin中使用一个数据类,我会得到以下错误

2018-04-26 14:13:43.730错误79256---[nio-8080-exec-2]B.E.H.RestResponseEntityExceptionHandler:org.springFramework.http.converter.httpMessageNotReadableException:JSON解析错误:无法构造com.baeldung.models.Library实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法可从字符串值反序列化('http://localhost:8080/libraries/1');嵌套异常为com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造com.baeldung.models.library的实例(尽管至少存在一个创建者):在[源:(org.apache.catalina.connector.coyoteInputStream);行:1,列:29](通过引用链:com.baeldung.models.book[“library”])处没有可从字符串值(“htp://localhost:8080/libraries/1”)反序列化的字符串参数构造函数/工厂方法

我的项目中确实有相关的kotlin-spring、kotlin-jpa和kotlin-noarg插件。

代码在此https://github.com/vijaysl/spring-data-rest

共有1个答案

鲍建业
2023-03-14

Kotlin数据类非常严格。它告诉你,基本上,它不能构造你的POKO并且它列出了它尝试的一些方法。其中之一是使用字符串构造函数。另一些则是通过私有字段操作(这是通常的操作方式)。

kotlin中的数据类,如果它们的字段声明为private val name:String转换为(java中的)private final字符串名称;它不能分配给final字段(尝试分配给private字段是肮脏的,但当它是final时是不可能的;JVM不允许这样做),并且没有getName()setName()函数可以用作另一种水合方法。

一些选项:

  1. 声明变量为var而不是valprivate var name:Stringprivate String name的java等价物,后者将使用基于字段的(脏)水合。
  2. 包含用于kotlin的特定kotlin依赖项以修复此问题:compile(“com.fasterxml.jackson.module:jackson-module-kotlin”)查看此项目

适用于您的kotlin类示例:

import org.springframework.hateoas.Identifiable
import java.time.LocalDate
import javax.persistence.*
import javax.validation.constraints.*

@Entity
data class Employee(@Pattern(regexp = "[A-Za-z0-9]+")
                    @Size(min = 6, max = 32)
                    val name: String,
                    @Email
                    @NotNull
                    val email: String?,
                    @PastOrPresent
                    val hireDate: LocalDate = LocalDate.now(),

                    @OneToMany(mappedBy = "employee", cascade = [CascadeType.ALL])
                    val forms:List<Form> = listOf(),
                    @OneToMany(mappedBy = "employee", cascade = [CascadeType.ALL])
                    val reports:List<Report> = listOf(),
                    @Id @GeneratedValue( strategy =  GenerationType.IDENTITY) private val id: Long? = null): Identifiable<Long> {

    override fun getId() = id

    constructor(name:String): this(name,"$name@foo.com")
}
 类似资料:
  • 问题内容: 我在GoRM ORM中使用Go 。我有以下结构。关系很简单。一个城镇有多个地方,一个地方属于一个城镇。 现在,我想查询所有地方,并与他们所有的字段一起了解相应城镇的信息。这是我的代码: 我的样本数据库具有以下数据: 我 收到 这个: 但是我 希望 收到这样的信息(两个地方都属于同一个城镇): 我该如何查询?我尝试使用,并没有成功(可能是错误的方式)。我无法获得预期的结果。 问题答案:

  • 我已经两天没有解决AR协会的问题了。我知道有一个简单的解决办法,但我想不出来。 我有两个模型,产品和用户,应该联系在一起。一个产品应该属于一个用户,一个用户应该有很多产品。我没有在控制器中设置用户变量,所以我选择了habtm关联。以下是模型: User.rb Product.rb products\u控制器。rb型 _形式。html。erb公司 架构。rb型 所以,即使我知道,用户和产品之间应该有

  • 主要内容:MQTT(消息队列遥测传输),SMQTT(安全消息队列遥测传输),CoAP协议,DDS通信协议会话层协议审查消息传递的标准和协议。不同的标准化组织引入了IoT会话层协议。有不同功能和范围的不同类型会话层协议。MQTT和CoAP通过小消息大小,消息管理和轻量级消息开销来满足这些需求。 MQTT(消息队列遥测传输) MQTT(消息队列遥测传输)是IBM于1999年推出的消息传递协议。它最初用于监视物联网中的传感器节点和远程跟踪。它适合小巧,便宜,低内存和低功耗的设备。MQTT在一侧提供应用

  • 我目前面临的问题是如何处理聚合中实体之间的关联。 考虑以下示例: 现在,我们有一个,User“实体,也是我的聚合根。他可以有一个,Product”和多个,别名。我现在需要的是检索相关的,Product和,,域模型中的“按需别名”。用户由UserFactory创建,当从持久性数据创建实体时,可以单独使用,也可以在UserRepository中使用。 这样做的原因是因为我们的业务逻辑(如您在示例中看到

  • 我正在尝试理解kotlin协程,我来自C#,在kotlin中有一些我不理解的地方。在这种情况下,我正在使用Qukus框架中的静态编程语言编写一个webapi。从我可以看出,如果我将控制器(或资源)函数标记为挂起函数,Qukus将自动在协程中启动它。 我的问题是,我不知道挂起该协程的首选方法是什么。我在kotlin协程上看到的绝大多数示例都使用delay()函数,该函数在内部使用suspendCan

  • 好吧,标题说明了一切。出于测试目的,我需要每个SSL会话重新协商其加密参数。我是否可以将Fiddler配置为始终拒绝客户端的请求,以重用以前协商的加密参数,并强制其协商新的加密参数?