我从 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?
)
有效负载:
看起来一切正常,这里有一些可以尝试的事情:
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()
}
}
saveOffer
参数更改为字符串,看看会得到什么: fun saveOffer(@RequestBody map: Map<String, Any>): Boolean {
println(map)
}
将
@PostMapping
注释更改为
@PostMapping(consumes = [MediaType.APPLICATION_JSON_VALUE])
但我认为这是默认的。
在客户端发送类似
Content-Type: application/json; charset=utf-8
的标头