背景:我将Kotlin与Micronaut一起使用,对于这个项目,我不会添加Spring依赖项。
我成功地创建了一个Hello Word enpoint,我可以从邮递员那里发布到它。问题始于我将数据演化为生日(java.time.LocalDate)。
抄袭自邮递员
curl --location --request POST 'localhost:8080/accountholders' --header 'Content-Type: application/json' --data-raw '{
"name": "Jimis",
"age":42,
"birthDate":"1978-04-14",
"category":"'\''Student'\''"
}'
导致
{
"message": "Required argument [AccountHolder accountHolder] not specified",
"path": "/accountHolder",
"_links": {
"self": {
"href": "/accountholders",
"templated": false
}
}
}
实体
import com.fasterxml.jackson.annotation.JsonFormat
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer
import java.time.LocalDate
import javax.persistence.*
@Entity
data class AccountHolder(@Id
@GeneratedValue //(strategy = GenerationType.SEQUENCE, generator = "account_generator")
//@SequenceGenerator(name="account_generator", sequenceName = "account_seq")
var id: Long? = null,
var name: String? = null,
var age: Int,
@field:JsonFormat(pattern = "yyyy-MM-dd")
@field:JsonSerialize(using = LocalDateSerializer::class)
@field:JsonDeserialize(using = LocalDateDeserializer::class)
var birthDate: LocalDate,
var category: Category
)
控制器
import com.mybank.model.AccountHolder
import com.mybank.service.AccountHolderService
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Consumes
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Post
import javax.validation.Valid
@Controller("/accountholders")
class AccountHolderController(private val accountHolderService: AccountHolderService) {
@Post
@Consumes(MediaType.APPLICATION_JSON)
fun addAccountHolder(accountHolder: AccountHolder): AccountHolder {
return accountHolderService.addAccountHolder(accountHolder)
}
@Get
fun getAccountHolder(id: Long): AccountHolder{
return accountHolderService.findAccountHolderById(id)
}
}
gradle.properties依赖关系
dependencies {
kapt("io.micronaut.data:micronaut-data-processor")
implementation("io.micronaut:micronaut-validation")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut:micronaut-runtime")
implementation("javax.annotation:javax.annotation-api")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("io.micronaut.data:micronaut-data-hibernate-jpa")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
runtimeOnly("com.h2database:h2")
}
格雷德尔。属性
micronautVersion=2.1.3
kotlinVersion=1.4.10
整个项目git hub(分支机构日期问题中的错误,而不是主文件中的错误)
您应该用@Body
注释方法参数:
import io.micronaut.http.annotation.*
// ...
@Post
@Consumes(MediaType.APPLICATION_JSON)
fun addAccountHolder(@Body accountHolder: AccountHolder): AccountHolder {
return accountHolderService.addAccountHolder(accountHolder)
}
我正在使用SpringMVC编写一个Web应用程序。在我的jsp中是一个表单,内容与Ajax一起发送到我的控制器。映射方法的简化代码如下所示: 我已将CustomDateEditor注册到: 当表单输入中的字符串正确时,不会抛出异常。问题是,当日期的输入为空或包含无法转换为日期的字符串时,我会得到异常:< code >所需的日期参数' createdTo '不存在。 我甚至编写了自己的DateEd
我刚刚开始创建我的第一个OpenAPI定义(2.0版),我一直被这个错误所困扰: 无效的OpenAPI文件。请修复模式错误:\n\"/参数/分类Param\":域:验证;关键字:oneOf;消息:实例与一个模式不完全匹配;匹配:0" 它只是一个类似于“/cat/count”的查询,它将返回一个整数,即有多少猫-“cat”是所需的路径参数。我的参数定义到底有什么问题?
问题内容: 我继承了一些代码,这些代码最终将成为API调用的一部分。基于现有代码,该调用是使用access_token检索JSON代码的帖子。尽管这通常很简单,并且像其他所有API一样,但是此代码要求为客户机密提供一个自定义的httpheader字段。 我能够使用URLRequest等在Objective C中完成此工作,但是由于我正在创建对Web组件的调用,因此遇到了很多困难。 我正在使用一个非
问题内容: 是否可以指定log4j将使用的时区?我需要日志文件中的日期与应用程序的日期不同。log4j的使用。不幸的是,似乎没有一种通过模式字符串来控制时区的方法(有方法,但这无济于事)。 我查看了log4j的来源,并在中对其进行了实例化。不幸的是,没有一个简单的方法可以控制时区。 问题答案: 如果在类路径上使用Log4J extras JAR文件,则EnhancedPatternLayout类支
问题内容: 我有一个返回例如DateTime对象的Web服务:DepartureDate。我使用ajax来获取此代码,并在我看来使用此功能将JSON日期字符串转换为javascript日期对象: 问题是要考虑到客户端计算机上的本地时间,因此不同国家/地区的客户端会获得不同的日期。我想获取从Web服务返回的确切日期。有没有简单的方法可以做到这一点? 问题答案: 问题是考虑了客户端计算机上的本地时间