改造 post 对象参数,但收到 "parameter is not present" 错误
Retrofit post a object parameter, but receive a "parameter is not present" error
这是我的 spring 引导控制器:
@RestController
@RequestMapping("/api/v1/geo-media/")
class GeoMediaController {
@PostMapping("create")
fun saveMedias(@RequestHeader("token") token: String,
@RequestParam mediaGroup: WalkMediaGroup):Result<String> {
}
}
这里是参数class:
class WalkMediaGroup (
val wid: Long,
val mediaGroup: MediaGroup
)
class MediaGroup(
val node: Node,
val medias: List<Media>
)
class Media (
val type: Int,
val content: String,
val remark: String
)
然后我的 Retrofit 服务 class:
interface ApiService {
@Headers("Content-Type: application/json")
@POST("geo-media/create")
fun createGeoMedias(
@Body mediaGroup: WalkMediaGroup
): Call<Result<String>>
}
以上是我的代码的关键部分。我不知道为什么我收到错误。
{
"timestamp":"2019-10-25T11:46:10.247+0000",
"status":400,
"error":"Bad Request",
"message":"Required WalkMediaGroup parameter 'mediaGroup' is not present",
......
}
来自 Android(或可能是任何客户端)您正在发布 JSON 正文。为了在服务器中接收 JSON body 参数,您必须使用 Spring Boot @RequestBody()
annotation instead of @RequestParam()
注释。
因此,在您的 Spring 引导 API 代码中,只需将注释从 @RequestParam()
更改为 @RequestBody()
。就是这样!
@PostMapping("create")
fun saveMedias(
@RequestHeader("token") token: String,
/* notice the change here ==> */ @RequestBody mediaGroup: WalkMediaGroup):Result<String> {
}
这是我的 spring 引导控制器:
@RestController
@RequestMapping("/api/v1/geo-media/")
class GeoMediaController {
@PostMapping("create")
fun saveMedias(@RequestHeader("token") token: String,
@RequestParam mediaGroup: WalkMediaGroup):Result<String> {
}
}
这里是参数class:
class WalkMediaGroup (
val wid: Long,
val mediaGroup: MediaGroup
)
class MediaGroup(
val node: Node,
val medias: List<Media>
)
class Media (
val type: Int,
val content: String,
val remark: String
)
然后我的 Retrofit 服务 class:
interface ApiService {
@Headers("Content-Type: application/json")
@POST("geo-media/create")
fun createGeoMedias(
@Body mediaGroup: WalkMediaGroup
): Call<Result<String>>
}
以上是我的代码的关键部分。我不知道为什么我收到错误。
{
"timestamp":"2019-10-25T11:46:10.247+0000",
"status":400,
"error":"Bad Request",
"message":"Required WalkMediaGroup parameter 'mediaGroup' is not present",
......
}
来自 Android(或可能是任何客户端)您正在发布 JSON 正文。为了在服务器中接收 JSON body 参数,您必须使用 Spring Boot @RequestBody()
annotation instead of @RequestParam()
注释。
因此,在您的 Spring 引导 API 代码中,只需将注释从 @RequestParam()
更改为 @RequestBody()
。就是这样!
@PostMapping("create")
fun saveMedias(
@RequestHeader("token") token: String,
/* notice the change here ==> */ @RequestBody mediaGroup: WalkMediaGroup):Result<String> {
}