I am trying to send a multipart/formdata object to the backend that contains a Freelancer object and two image files that have to be stored on the server. The saving on disc part works, but saving the JSON string as a freelancer object is not working. I tried converting the string with Jackson objectmapper but I think I am doing something wrong. When I debug the application it crashes at mapper.readValue and goes straight to the catch().
I also tried to work with kotlinx.serializer, but the import just would not work so I switched to Jackson.
The Kotlin controller that takes in the request:
   private val imageDirectory = System.getProperty("user.dir") + "/images/"
@PostMapping(consumes = ["multipart/form-data"])
fun saveUser(
        @RequestParam("profileImage") profileImage: MultipartFile,
        @RequestParam("fileIdImage") fileIdImage: MultipartFile,
        @RequestParam("freelancer") freelancer: String,
): ResponseEntity<*> {
    return try {
        val mapper = ObjectMapper();
        val freelancerJson: Freelancer = mapper.readValue(freelancer, Freelancer::class.java)
        println(freelancerJson.aboutYou)
        makeDirectoryIfNotExist(imageDirectory)
        val profileImagePath: Path = Paths.get(imageDirectory, profileImage.originalFilename)
        val idImagePath: Path = Paths.get(imageDirectory, fileIdImage.originalFilename)
        Files.write(profileImagePath, profileImage.bytes);
        Files.write(idImagePath, fileIdImage.bytes);
        JsonResponse(HttpStatus.OK, "Saved freelancer} ").createResponseEntity()
    } catch (e: Exception) {
        JsonResponse(HttpStatus.INTERNAL_SERVER_ERROR, e.message.toString()).createResponseEntity()
    }
}
The request from the front end using vue:
The console output of the formdata:
Freelancer model:
@Entity
data class Freelancer(
    @Id
    val id: Int,
    //maps ID to freelancer primary key
    @MapsId
    @OneToOne(targetEntity = User::class)
    @JoinColumn(name = "freelancer_id")
    //ignores the freelancer id because it is already mapped to val id
    @JsonIgnore
    val freelancerId: User,
    val firstName: String? = null,
    val lastName: String? = null,
    val dateOfBirth: Date? = null,
    val kvk: String? = null,
    val btw: String? = null,
    val phone: String? = null,
    val street: String? = null,
    val zipcode: String? = null,
    val city: String? = null,
    val housenumber: Int? = 0,
    val addition: String? = null,
    val nameCardHolder: String? = null,
    val iban: String? = null,
    val referral: String? = null,
    val specialism: String? = null,
    val aboutYou: String? = null,
    val motivation: String? = null,
    val workExperience: Int? = null,
    val driverLicense: Boolean? = null,
    val ownTransport: Boolean? = null,
    val identificationImage: String? = null,
    val smallBusinessScheme: Boolean? = false,
    val profileImage: String? = null,
    val previousWorkedPlatform: String? = null,
    val servicesAmount: Int? = null,
    val previousWorkedRating: Int? = null,
    val foundBy: String? = null,
    val privacyStatement: Boolean? = null,
    )

