title: FastJson with putDeserializer leads to StackOverflowError
body: <p>Deserializing object using <a href="https://github.com/alibaba/fastjson" rel="nofollow noreferrer">FastJson</a> with putDeserializer leads to StackOverflowError. What am I doing wrong?</p>
  <p>test.json</p>
  <pre class="lang-json prettyprint-override"><code>{
    &quot;openapi&quot;: &quot;3.0.1&quot;,
    &quot;info&quot;: {
      &quot;title&quot;: &quot;Swagger Petstore&quot;,
      &quot;version&quot;: &quot;1.0.0&quot;,
      &quot;description&quot;: &quot;This is a sample server Petstore server&quot;
    }
  }
  </code></pre>
  <p>Spec.java</p>
  <pre class="lang-java prettyprint-override"><code>@Data
  public class Spec {
      private String openapi;
      private Info info;
  }
  </code></pre>
  <p>Info.java</p>
  <pre class="lang-java prettyprint-override"><code>@Data
  public class Info {
      private String title;
      private String version;
      private String description;
  }
  </code></pre>
  <p>InfoDeserializer.java</p>
  <pre class="lang-java prettyprint-override"><code>public class InfoDeserializer implements ObjectDeserializer {
      @Override
      public &lt;T&gt; T deserialze(DefaultJSONParser parser, Type type, Object o) {
          Info info = parser.parseObject(Info.class);
          return (T) info;
      }
  
      @Override
      public int getFastMatchToken() {
          return 0;
      }
  }
  </code></pre>
  <p>FastJsonTest.java</p>
  <pre class="lang-java prettyprint-override"><code>public class FastJsonTest {
      @Test
      public void test() throws IOException {
          // Read json file
          File file = new ClassPathResource(&quot;test.json&quot;).getFile();
          String json = new String(Files.readAllBytes(file.toPath()));
  
          // Parse json
          ParserConfig config = new ParserConfig();
          config.putDeserializer(Info.class, new InfoDeserializer());
          // This line leads to StackOverflow
          Spec spec = JSON.parseObject(json, Spec.class, config);
  
          // Assertion
          assertNotNull(spec);
      }
  }
  </code></pre>
  <hr />
  <p>However it works if I move deserializer from <code>ParserConfig</code> into <code>JSONField</code> annotation, but with this approach I am not able to pass custom parameters into deserializer.</p>
  <p>Spec.java</p>
  <pre class="lang-java prettyprint-override"><code>@Data
  public class Spec {
      private String openapi;
      @JSONField(deserializeUsing = InfoDeserializer.class)
      private Info info;
  }
  </code></pre>
  <p>FastJsonTest.java</p>
  <pre class="lang-java prettyprint-override"><code>public class FastJsonTest {
      @Test
      public void test() throws IOException {
          // Read json file
          File file = new ClassPathResource(&quot;test.json&quot;).getFile();
          String json = new String(Files.readAllBytes(file.toPath()));
  
          // Parse json
          Spec spec = JSON.parseObject(json, Spec.class);
  
          // Assertion
          assertNotNull(spec);
      }
  }
  </code></pre>