@RequestBody 不适用于 @JsonProperty

Posted

技术标签:

【中文标题】@RequestBody 不适用于 @JsonProperty【英文标题】:@RequestBody not working with @JsonProperty 【发布时间】:2020-05-11 05:01:48 【问题描述】:

我正在使用Spring Boot 2.2.2Kotlin 1.3.61 构建一个API。 我以前做过,不记得遇到过这个问题。

基本上我有以下 DTO:

class RequestDTO 
    @JsonProperty(value = "phone_number")
    var phoneNumber: String = ""

我想将它用作 POST 控制器的参数:

@PostMapping("/test")
fun test(@RequestBody body: RequestDTO): Object 
    return service.doStuff(body)

我正在请求它


    "phone_number": "12345"

我的RequestDTO 没有定义phoneNumber 属性(默认值为空)。如果我在请求中传递了phoneNumber,那么它可以很好地反序列化。

还有一个非常奇怪的部分是以下代码可以正常工作:

val om = ObjectMapper()
val rqDto = RequestDTO()
rqDto.phoneNumber = "12345"

val rqStr = om.writeValueAsString(rqDto) //  "phone_number": "12345" 

val rqDto2 = om.readValue(rqStr, RequestDTO::class.java) // [phoneNumber = "12345"]

所以问题似乎是关于@RequestBody@JsonProperty 在一起......?我错过了一些配置吗?

我也尝试过使用@get:JsonProperty()@set:JsonProperty(),但没有成功。

谢谢

【问题讨论】:

请求中的 "phone_numer" 是错字,对吧? @amseager 是的,仅在问题中。已修复,谢谢。 奇怪的是,我刚刚使用 SPring Initializr 从 0 开始了一个项目,它似乎工作正常......将四处寻找,看看我的项目中是否有任何其他依赖项可能是冲突的...... 【参考方案1】:

嗯,原来这是一个简单的问题。 该项目有一个依赖关系,它依赖于org.codehaus.jackson,我使用的是org.codehaus.jackson.annotate.JsonProperty而不是com.fasterxml.jackson.annotation.JsonProperty。改变它有效。 -_-

【讨论】:

以上是关于@RequestBody 不适用于 @JsonProperty的主要内容,如果未能解决你的问题,请参考以下文章

@ResponseBody 和 @RequestBody 注解的区别

@Responsebody与@RequestBody

@Responsebody与@RequestBody

@RequestBody, @ResponseBody 注解详解(转)

spring 中注解的详细解释之@Responsebody与@RequestBody

@RequestBody, @ResponseBody 注解理解