Модифицируйте публикацию параметра объекта, но получите ошибку «параметра нет» - PullRequest
0 голосов
/ 25 октября 2019

Вот мой контроллер весенней загрузки:

@RestController
@RequestMapping("/api/v1/geo-media/")
class GeoMediaController {
@PostMapping("create")
    fun saveMedias(@RequestHeader("token") token: String,
                   @RequestParam mediaGroup: WalkMediaGroup):Result<String> {
    }
}

Вот класс параметров:

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:

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",
 ......
}

1 Ответ

2 голосов
/ 26 октября 2019

С Android (или любого другого клиента) вы публикуете тело JSON. Чтобы получить этот параметр тела JSON на сервере, вы должны использовать аннотацию Spring Boot @RequestBody() вместо @RequestParam() аннотации.

Итак, в вашемКод Spring Boot API просто измените аннотацию с @RequestParam() на @RequestBody(). Вот и все!

@PostMapping("create")
fun saveMedias(
    @RequestHeader("token") token: String,
   /* notice the change here ==> */ @RequestBody mediaGroup: WalkMediaGroup):Result<String> {
}
...