Spring Boot 服务中的 POST 负载为零

问题描述 投票:0回答:1

我从 ReactJS 应用程序发送到 SpringBoot 服务的负载有问题。正如您在第一张图片中看到的,有效负载已填充。但是,如果我在后端设置调试器,则两个字段都为空或为零。为什么会这样呢?我做错了什么?

反应前端:

const saveOffer = async (offers: Offer[], newUser: User) => {
var objects = {
  offers,
  newUser,
};
const res = await axios.post(
  'http://...'/api/offer',
  { objects }
 );
};

优惠.tk

 @RestController
 @RequestMapping("/api/offer")
 class OfferController {

 @PostMapping
 fun saveOffer(@RequestBody objects: ObjHolder): Boolean {
    var simpleUser = objects.newUser
    var offers = objects.offers

     return true
  }
 }

ObjHolder.tk:

 data class ObjHolder(
  var offers: List<Offer>? = mutableListOf(),
  var newUser:User?
)

有效负载:

调试器:

spring-boot kotlin jpa
1个回答
0
投票

看起来一切正常,这里有一些可以尝试的事情:

  1. 您是否以任何方式将 Jackson 配置为 Spring 中的序列化助手?也许它没有配置为反序列化到 Kotlin。一旦按照如下方式配置,您就可以将
    data class
    val
    构造函数一起使用,而无需任何特殊配置:
@Configuration
class ObjectMapperConfig {

    @Bean
    fun makeObjectMapper(): ObjectMapper {
        return JsonMapper.builder()
            .addModule(KotlinModule.Builder().configure(KotlinFeature.StrictNullChecks, true).build())
            .addModule(JavaTimeModule())
            .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .build()
    }
}
  1. 暂时将
    saveOffer
    参数更改为字符串,看看会得到什么:
    fun saveOffer(@RequestBody map: Map<String, Any>): Boolean {
        println(map)
    }
  1. @PostMapping
    注释更改为
    @PostMapping(consumes = [MediaType.APPLICATION_JSON_VALUE])
    但我认为这是默认的。

  2. 在客户端发送类似

    Content-Type: application/json; charset=utf-8

    的标头
© www.soinside.com 2019 - 2024. All rights reserved.