Как передать ByteArray в контроллер Spring Boot?

Хочу передать файл в виде массива байтов в контроллер. Код функции контроллера:

@PostMapping("/file")
fun convertFile(data: ByteArray?): ResponseEntity<ByteArray> {
    if (data != null && data.isNotEmpty()) {
        val retVal: ByteArray = someFunction(data)
        return ResponseEntity
            .ok()
            .body(retVal)
    }
    return ResponseEntity
        .noContent()
        .build()
}

Код теста:

@Test
fun testF1() {
    val fileByteArray = FileSystemResource("E:/test.pdf").inputStream.readBytes()
    val requestEntity = RequestEntity.post("/api/v1/file")
        .body(
            LinkedMultiValueMap<String, Any>().apply {
                add("data", fileByteArray)
            }
        )

    val answer = testRestTemplate.exchange(requestEntity, ByteArray::class.java)
}

Из теста уходит 53614 байт, в контроллер приходит 50920. В чем может быть проблема? Или, если рассматривать вопрос с другой стороны, как корректно передавать ByteArray в такой ситуации?


Ответы (1 шт):

Автор решения: he1ex-tG

Сделал так: "положил" ByteArray в класс-обертку

class MyClass(
    val content: ByteArray,
)

Тип запроса Application/JSON. В теле запроса передаю экземпляр класса.

→ Ссылка