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

发布带有日期的json时“未指定必需参数”

孔征
2023-03-14

背景:我将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(分支机构日期问题中的错误,而不是主文件中的错误)

共有1个答案

鲜于仰岳
2023-03-14

您应该用@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服务返回的确切日期。有没有简单的方法可以做到这一点? 问题答案: 问题是考虑了客户端计算机上的本地时间