改造 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> {
}