* [kotlin][jvm-okhttp4] Fix multipart/form-data with JSON content-type
Fixes#16457
Fixes two critical bugs in multipart/form-data handling when parts
have Content-Type application/json:
1. IllegalArgumentException: OkHttp throws "Unexpected header: Content-Type"
because Content-Type was passed in headers map instead of via
asRequestBody(mediaType)/toRequestBody(mediaType) parameter.
2. Invalid JSON serialization: Non-file parts with application/json
Content-Type were serialized using toString() instead of proper
JSON serialization, producing invalid output like:
"MyObject(field1=value, field2=123)" instead of
'{"field1":"value","field2":123}'
Changes:
- Filter Content-Type from headers before passing to OkHttp
- Check part Content-Type and use appropriate serializer (JSON vs toString)
- Add integration tests with echo server to verify fix
- Support all serialization libraries (gson, moshi, jackson, kotlinx)
Fixes issues with multipart endpoints that mix file uploads with
JSON metadata, common in REST APIs for document/image uploads.
* Run mvn clean/package, and regenerate samples
* Add fix for kotlinx serialisation issue
* Refactor multipart helpers for reified type parameter support
* Fix kotlinx.serialization multipart by adding serializer lambda to PartConfig
* Fix internal Ktor API usage in multipart forms
* [kotlin] Add integration test for query params
This is a test for a regression from #22512 where param values
were written as a list.
* add test implementation for kotlin spring client
* add sha tests
---------
Co-authored-by: Piotr Kubowicz <piotr.kubowicz@gmail.com>
* [kotlin] Make API classes open (non-final) unless nonPublicApi is used
By making those classes open, AspectJ can be used to enhance their
behavior.
I'm not changing kotlin-multiplatform templates, where 'open' was
already present before my changes.
Closes#22271
* Fail Kotlin sample compilation if API classes stop to be public
Serves as a 'regression test'.
* this allows pushing client jar to local maven repository gradle -i clean jar publishToMavenLocal; also generates jar with sources;
* this allows pushing client jar to local maven repository gradle -i clean jar publishToMavenLocal; also generates jar with sources;