jackson cannot deserialize (spring cloud stream kafka)












1















I am trying to read a json message from kafka and got an exception, which says Jackson cannot deserialize the json to POJO.



The json is like {"code":"500","count":22,"from":1528343820000,"to":1528343880000}, which is an output of kafka stream.



The POJO declares all attributes of the json, and is exactly the same POJO to produce the json message. So I have no idea why it would happen.



I am using spring cloud stream 2.0.0.RELEASE.



Any help would be appreciated. Thanks.



POJO:



public class CodeCount {
private String code;
private long count;
private Date from;
private Date to;

@Override
public String toString() {
return "CodeCount [code=" + code + ", count=" + count + ", from=" + from + ", to=" + to + "]";
}

public CodeCount(String code, long count, Date from, Date to) {
super();
this.code = code;
this.count = count;
this.from = from;
this.to = to;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public long getCount() {
return count;
}

public void setCount(long count) {
this.count = count;
}

public Date getFrom() {
return from;
}

public void setFrom(Date from) {
this.from = from;
}

public Date getTo() {
return to;
}

public void setTo(Date to) {
this.to = to;
}
}


Stacktrace:



2018-06-07 15:18:51.572 ERROR 1 --- [container-0-C-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (byte)"{"code":"500","count":22,"from":1528343820000,"to":1528343880000}"; line: 1, column: 2]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1451) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1027) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1275) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:325) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3109) ~[jackson-databind-2.9.3.jar!/:2.9.3]
at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:221) ~[spring-messaging-5.0.6.RELEASE.jar!/:5.0.6.RELEASE]
... 37 common frames omitted









share|improve this question





























    1















    I am trying to read a json message from kafka and got an exception, which says Jackson cannot deserialize the json to POJO.



    The json is like {"code":"500","count":22,"from":1528343820000,"to":1528343880000}, which is an output of kafka stream.



    The POJO declares all attributes of the json, and is exactly the same POJO to produce the json message. So I have no idea why it would happen.



    I am using spring cloud stream 2.0.0.RELEASE.



    Any help would be appreciated. Thanks.



    POJO:



    public class CodeCount {
    private String code;
    private long count;
    private Date from;
    private Date to;

    @Override
    public String toString() {
    return "CodeCount [code=" + code + ", count=" + count + ", from=" + from + ", to=" + to + "]";
    }

    public CodeCount(String code, long count, Date from, Date to) {
    super();
    this.code = code;
    this.count = count;
    this.from = from;
    this.to = to;
    }

    public String getCode() {
    return code;
    }

    public void setCode(String code) {
    this.code = code;
    }

    public long getCount() {
    return count;
    }

    public void setCount(long count) {
    this.count = count;
    }

    public Date getFrom() {
    return from;
    }

    public void setFrom(Date from) {
    this.from = from;
    }

    public Date getTo() {
    return to;
    }

    public void setTo(Date to) {
    this.to = to;
    }
    }


    Stacktrace:



    2018-06-07 15:18:51.572 ERROR 1 --- [container-0-C-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
    at [Source: (byte)"{"code":"500","count":22,"from":1528343820000,"to":1528343880000}"; line: 1, column: 2]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1451) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1027) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1275) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:325) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3109) ~[jackson-databind-2.9.3.jar!/:2.9.3]
    at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:221) ~[spring-messaging-5.0.6.RELEASE.jar!/:5.0.6.RELEASE]
    ... 37 common frames omitted









    share|improve this question



























      1












      1








      1


      1






      I am trying to read a json message from kafka and got an exception, which says Jackson cannot deserialize the json to POJO.



      The json is like {"code":"500","count":22,"from":1528343820000,"to":1528343880000}, which is an output of kafka stream.



      The POJO declares all attributes of the json, and is exactly the same POJO to produce the json message. So I have no idea why it would happen.



      I am using spring cloud stream 2.0.0.RELEASE.



      Any help would be appreciated. Thanks.



      POJO:



      public class CodeCount {
      private String code;
      private long count;
      private Date from;
      private Date to;

      @Override
      public String toString() {
      return "CodeCount [code=" + code + ", count=" + count + ", from=" + from + ", to=" + to + "]";
      }

      public CodeCount(String code, long count, Date from, Date to) {
      super();
      this.code = code;
      this.count = count;
      this.from = from;
      this.to = to;
      }

      public String getCode() {
      return code;
      }

      public void setCode(String code) {
      this.code = code;
      }

      public long getCount() {
      return count;
      }

      public void setCount(long count) {
      this.count = count;
      }

      public Date getFrom() {
      return from;
      }

      public void setFrom(Date from) {
      this.from = from;
      }

      public Date getTo() {
      return to;
      }

      public void setTo(Date to) {
      this.to = to;
      }
      }


      Stacktrace:



      2018-06-07 15:18:51.572 ERROR 1 --- [container-0-C-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
      at [Source: (byte)"{"code":"500","count":22,"from":1528343820000,"to":1528343880000}"; line: 1, column: 2]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
      at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1451) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1027) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1275) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:325) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3109) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:221) ~[spring-messaging-5.0.6.RELEASE.jar!/:5.0.6.RELEASE]
      ... 37 common frames omitted









      share|improve this question
















      I am trying to read a json message from kafka and got an exception, which says Jackson cannot deserialize the json to POJO.



      The json is like {"code":"500","count":22,"from":1528343820000,"to":1528343880000}, which is an output of kafka stream.



      The POJO declares all attributes of the json, and is exactly the same POJO to produce the json message. So I have no idea why it would happen.



      I am using spring cloud stream 2.0.0.RELEASE.



      Any help would be appreciated. Thanks.



      POJO:



      public class CodeCount {
      private String code;
      private long count;
      private Date from;
      private Date to;

      @Override
      public String toString() {
      return "CodeCount [code=" + code + ", count=" + count + ", from=" + from + ", to=" + to + "]";
      }

      public CodeCount(String code, long count, Date from, Date to) {
      super();
      this.code = code;
      this.count = count;
      this.from = from;
      this.to = to;
      }

      public String getCode() {
      return code;
      }

      public void setCode(String code) {
      this.code = code;
      }

      public long getCount() {
      return count;
      }

      public void setCount(long count) {
      this.count = count;
      }

      public Date getFrom() {
      return from;
      }

      public void setFrom(Date from) {
      this.from = from;
      }

      public Date getTo() {
      return to;
      }

      public void setTo(Date to) {
      this.to = to;
      }
      }


      Stacktrace:



      2018-06-07 15:18:51.572 ERROR 1 --- [container-0-C-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
      at [Source: (byte)"{"code":"500","count":22,"from":1528343820000,"to":1528343880000}"; line: 1, column: 2]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.CodeCount` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
      at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1451) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1027) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1275) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:325) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4001) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3109) ~[jackson-databind-2.9.3.jar!/:2.9.3]
      at org.springframework.messaging.converter.MappingJackson2MessageConverter.convertFromInternal(MappingJackson2MessageConverter.java:221) ~[spring-messaging-5.0.6.RELEASE.jar!/:5.0.6.RELEASE]
      ... 37 common frames omitted






      jackson spring-cloud-stream






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jun 7 '18 at 8:02







      ccshih

















      asked Jun 7 '18 at 7:45









      ccshihccshih

      3211316




      3211316
























          2 Answers
          2






          active

          oldest

          votes


















          5














          Jackson needs access to the default constructor to deserialize, add the default constructor to the pojo, ie:



          public CodeCount() {
          }





          share|improve this answer
























          • Thanks for your help.

            – ccshih
            Jun 7 '18 at 9:05











          • You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

            – robjwilkins
            Nov 19 '18 at 12:10



















          0














          You can annotate the existing constructor, and args, and Jackson will use this:



          @JsonCreator
          public CodeCount(@JsonProperty("code") String code,
          @JsonProperty("count") long count,
          @JsonProperty("from") Date from,
          @JsonProperty("to") Date to) {
          super();
          this.code = code;
          this.count = count;
          this.from = from;
          this.to = to;
          }


          Passing in the dates may complicate it a bit, but it is definitely still possible.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f50735613%2fjackson-cannot-deserialize-spring-cloud-stream-kafka%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            5














            Jackson needs access to the default constructor to deserialize, add the default constructor to the pojo, ie:



            public CodeCount() {
            }





            share|improve this answer
























            • Thanks for your help.

              – ccshih
              Jun 7 '18 at 9:05











            • You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

              – robjwilkins
              Nov 19 '18 at 12:10
















            5














            Jackson needs access to the default constructor to deserialize, add the default constructor to the pojo, ie:



            public CodeCount() {
            }





            share|improve this answer
























            • Thanks for your help.

              – ccshih
              Jun 7 '18 at 9:05











            • You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

              – robjwilkins
              Nov 19 '18 at 12:10














            5












            5








            5







            Jackson needs access to the default constructor to deserialize, add the default constructor to the pojo, ie:



            public CodeCount() {
            }





            share|improve this answer













            Jackson needs access to the default constructor to deserialize, add the default constructor to the pojo, ie:



            public CodeCount() {
            }






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Jun 7 '18 at 8:36









            PaizoPaizo

            1,9551725




            1,9551725













            • Thanks for your help.

              – ccshih
              Jun 7 '18 at 9:05











            • You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

              – robjwilkins
              Nov 19 '18 at 12:10



















            • Thanks for your help.

              – ccshih
              Jun 7 '18 at 9:05











            • You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

              – robjwilkins
              Nov 19 '18 at 12:10

















            Thanks for your help.

            – ccshih
            Jun 7 '18 at 9:05





            Thanks for your help.

            – ccshih
            Jun 7 '18 at 9:05













            You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

            – robjwilkins
            Nov 19 '18 at 12:10





            You do not need a default constructor, you can annotate the existing constructor with @JsonCreator, and Jackson will use this

            – robjwilkins
            Nov 19 '18 at 12:10













            0














            You can annotate the existing constructor, and args, and Jackson will use this:



            @JsonCreator
            public CodeCount(@JsonProperty("code") String code,
            @JsonProperty("count") long count,
            @JsonProperty("from") Date from,
            @JsonProperty("to") Date to) {
            super();
            this.code = code;
            this.count = count;
            this.from = from;
            this.to = to;
            }


            Passing in the dates may complicate it a bit, but it is definitely still possible.






            share|improve this answer




























              0














              You can annotate the existing constructor, and args, and Jackson will use this:



              @JsonCreator
              public CodeCount(@JsonProperty("code") String code,
              @JsonProperty("count") long count,
              @JsonProperty("from") Date from,
              @JsonProperty("to") Date to) {
              super();
              this.code = code;
              this.count = count;
              this.from = from;
              this.to = to;
              }


              Passing in the dates may complicate it a bit, but it is definitely still possible.






              share|improve this answer


























                0












                0








                0







                You can annotate the existing constructor, and args, and Jackson will use this:



                @JsonCreator
                public CodeCount(@JsonProperty("code") String code,
                @JsonProperty("count") long count,
                @JsonProperty("from") Date from,
                @JsonProperty("to") Date to) {
                super();
                this.code = code;
                this.count = count;
                this.from = from;
                this.to = to;
                }


                Passing in the dates may complicate it a bit, but it is definitely still possible.






                share|improve this answer













                You can annotate the existing constructor, and args, and Jackson will use this:



                @JsonCreator
                public CodeCount(@JsonProperty("code") String code,
                @JsonProperty("count") long count,
                @JsonProperty("from") Date from,
                @JsonProperty("to") Date to) {
                super();
                this.code = code;
                this.count = count;
                this.from = from;
                this.to = to;
                }


                Passing in the dates may complicate it a bit, but it is definitely still possible.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 19 '18 at 12:12









                robjwilkinsrobjwilkins

                2,41522237




                2,41522237






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f50735613%2fjackson-cannot-deserialize-spring-cloud-stream-kafka%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Guess what letter conforming each word

                    Port of Spain

                    Run scheduled task as local user group (not BUILTIN)