title: JsonDeserializer<T> deserialize-method not invoked on absent properties
body: <p>I have a simple, yet complex question: <strong>is it possible to have a JsonDeserializer be invoked on missing JSON-properties?</strong></p>
  
  <p>Why: I have a RegisterableProfile, which corresponds to a form the user has populated and sent to the server. In its most simple form it looks something like this:</p>
  
  <p><strong>JSON-Request</strong>, which will be mapped to a RegisterableProfile:</p>
  
  <pre><code>{
      "username": "someUser",
      "password": "somePass",
      "email": "some@mail.com",
      "language": "en"
  }
  </code></pre>
  
  <p>The entity it's mapped onto (<strong>RegisterableProfile</strong>):</p>
  
  <pre><code>@Getter
  @Setter
  @EqualsAndHashCode(callSuper = true)
  @MappedSuperclass
  public class RegisterableProfile extends CredentialsProfile {
      @Column(nullable = false, unique = true)
      private String email;
  
      @OneToOne
      @Convert(converter = LanguageConverter.class)
      private Language language;
  
      @Override
      public String toString() {
          return new StringBuilder(RegisterableProfile.class.getSimpleName())
                                                                             .append(" {")
                                                                             .append("name : '").append(getUsername()).append("',")
                                                                             .append("password : '").append(getPassword()).append("',")
                                                                             .append("email : '").append(email)
                                                                             .append("'}")
                                                                             .toString();
      }
  }
  </code></pre>
  
  <p>Note, that CredentialsProfile simply provides the username and password and is separated from this class, because on an initial login it may occur separately.</p>
  
  <p><strong>Language</strong> entity:</p>
  
  <pre><code>@JsonDeserialize(using = LanguageDeserializer.class)
  @Data
  @NoArgsConstructor
  @Entity(name = "Languages")
  public class Language {
      @Id
      @Column(nullable = false, unique = true)
      private String  languageCode;
      @Column(nullable = false, unique = true)
      private String  name;
      @Column(nullable = false, unique = true)
      private String  i18nName;
      private boolean localizeUi      = false;
      private boolean canChoose       = false;
      private boolean defaultLanguage = false;
  }
  </code></pre>
  
  <p>The "language"-property in the JSON-String is converted properly into a Language-object using the LanguageDeserializer - <strong>if the property is present</strong>.
  However: if the <strong>property is missing or null</strong>, the LanguageDeserializer#deserialize method is not invoked and "language"-attribute in RegisterableProfile stays null.</p>
  
  <p>I probably could work around this problem by checking whether language-attribute is "null" inside my ProfileService-method and setting it there if so, but it does not seem as clean as having the custom Deserializer be invoked on the missing property.</p>
  
  <p>Another idea (still rather a workaround) would be to have a custom deserializer for RegisterableProfile as well and have it detect if language-property is missing or something, but I have no idea how to go about it.</p>
  
  <p>My <strong>LanguageDeserializer</strong>:</p>
  
  <pre><code>public class LanguageDeserializer extends JsonDeserializer&lt;Language&gt; {
  
      @Autowired
      private LanguageService languageService;
  
      @Override
      public Language deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException, JsonProcessingException {
          final JsonNode node = p.readValueAsTree();
          final String languageCode = node.asText();
          return languageService.getLanguage(languageCode);
      }
  }
  </code></pre>
  
  <p>Note: languageService.getLanguage(...) always returns either an Language-object matching the languageCode or the default Language-object.</p>
  
  <p>Furthermore: a solution should be working with spring-boot (and its stack of libraries). I am currently using spring-boot version 1.5.7.RELEASE and 2.8.10 (bundled with spring-boot).</p>