title: JsonDeserialize throws JSON parse error on request in Kotlin
body: <p>I am trying to use Jackson's JsonDeserialize in Kotlin, but I am having problems setting up the data classes. I get the following error when I throw a request to the controller.</p>
  
  <blockquote>
    <p>JSON parse error: Instantiation of [simple type, class co.com.bancodebogota.customer.accounts.entities.Customer] value failed for JSON property identificationNumber due to missing (therefore NULL) value for creator parameter identificationNumber which is a non-nullable type</p>
  </blockquote>
  
  <p>My data classes looks like this --> </p>
  
  <pre><code>data class BalanceByAccountRq @JsonCreator constructor(
      @JsonProperty("customer") var customer: Customer,
      @JsonProperty("account") var account: Account,
      @JsonProperty("ipAddress") var ipAddress: String,
      @JsonProperty("bankId") var bankId: String)
  
  data class Customer @JsonCreator constructor(
      @JsonProperty("identificationNumber") @JsonDeserialize(using = AsymmetricDeserializerString::class) var identificationNumber: String,
      @JsonProperty("identificationType") var identificationType: String)
  
  data class Account @JsonCreator constructor(
      @JsonProperty("accountId") var accountId: String,
      @JsonProperty("accountType") var accountType: String)
  </code></pre>
  
  <p>If I remove the JsonProperty does not make any difference</p>
  
  <p>Has anybody used this in kotlin? Am I missing something?</p>
  
  <p>This is the application class</p>
  
  <pre><code>@SpringBootApplication
  @EnableAutoConfiguration
  @ComponentScan(basePackages = arrayOf("co.com.adl", "co.com.bancodebogota"))
  @EnableConfigurationProperties
  class PbBbogAvalProductBalanceDetailApplication
  
      fun main(args: Array&lt;String&gt;) {
          SpringApplication.run(PbBbogAvalProductBalanceDetailApplication::class.java, *args)
      }
  
      @Bean
      @Throws(NoSuchAlgorithmException::class, NoSuchPaddingException::class)
      fun asymmetricCryptography(): AsymmetricCryptography {
          return AsymmetricCryptography();
      }
  </code></pre>
  
  <p>And the controller: </p>
  
  <pre><code>@PostMapping("/balance")
  fun getBalanceByAccount(@RequestBody @Valid rq: BalanceByAccountRq, resultOfValidation: BindingResult): ResponseEntity&lt;BalanceByAccountRs&gt; {
      System.out.println(rq);
      if (resultOfValidation.hasErrors()) {
          var fieldErrors : List&lt;FieldError&gt; = resultOfValidation.getFieldErrors();
          throw RequiredValidator(ERROR_PARAMETROS_DE_ENTRADA, fieldErrors);
      } else {
          return gbba.getBalanceByAccount(rq);
      }
  }
  </code></pre>
  
  <p>EDIT:</p>
  
  <p>Payload:</p>
  
  <pre><code>{
      "customer": {
          "identificationNumber": "80026300",
          "identificationType": "CC"
      },
      "account": {
          "accountId": "8929932",
          "accountType":"SDA"
      },
      "bankId": "0052",
      "ipAddress": "192.168.0.1"
  }
  </code></pre>
  
  <p>In dev profile does not decrypt, therefore the parameter is not encrypted in this payload. This works fine in a java8 microservice</p>