List and java.lang.ClassCastException: com.google.gson.internal.StringMap












0














Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question
























  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 '18 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 '18 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 '18 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 '18 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 '18 at 15:28
















0














Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question
























  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 '18 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 '18 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 '18 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 '18 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 '18 at 15:28














0












0








0







Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question















Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?







java json gson javabeans classcastexception






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 19 '18 at 15:40

























asked Nov 19 '18 at 14:26









rugby82

159214




159214












  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 '18 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 '18 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 '18 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 '18 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 '18 at 15:28


















  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 '18 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 '18 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 '18 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 '18 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 '18 at 15:28
















I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
– Thomas
Nov 19 '18 at 14:34




I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
– Thomas
Nov 19 '18 at 14:34




1




1




Possible duplicate of Gson TypeToken with dynamic ArrayList item type
– kan
Nov 19 '18 at 14:42




Possible duplicate of Gson TypeToken with dynamic ArrayList item type
– kan
Nov 19 '18 at 14:42












it does not solve my problem
– rugby82
Nov 19 '18 at 14:53




it does not solve my problem
– rugby82
Nov 19 '18 at 14:53












How you are calling jsonToListBean(..)?
– Ashish Patil
Nov 19 '18 at 15:04




How you are calling jsonToListBean(..)?
– Ashish Patil
Nov 19 '18 at 15:04












List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
– rugby82
Nov 19 '18 at 15:28




List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
– rugby82
Nov 19 '18 at 15:28












1 Answer
1






active

oldest

votes


















0














Solved. Thanks to kan's link below the code:



public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

List<T> lst = new ArrayList<T>();
try {
// Consuming remote method
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

for(final JsonElement json: array){
Gson g = new Gson();
T entity = g.fromJson(json, clazz);
lst.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} return lst;
}


check also this:
Gson TypeToken with dynamic ArrayList item type






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%2f53376727%2flisttype-and-java-lang-classcastexception-com-google-gson-internal-stringmap%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Solved. Thanks to kan's link below the code:



    public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

    List<T> lst = new ArrayList<T>();
    try {
    // Consuming remote method
    JsonParser parser = new JsonParser();
    JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

    for(final JsonElement json: array){
    Gson g = new Gson();
    T entity = g.fromJson(json, clazz);
    lst.add(entity);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } return lst;
    }


    check also this:
    Gson TypeToken with dynamic ArrayList item type






    share|improve this answer


























      0














      Solved. Thanks to kan's link below the code:



      public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

      List<T> lst = new ArrayList<T>();
      try {
      // Consuming remote method
      JsonParser parser = new JsonParser();
      JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

      for(final JsonElement json: array){
      Gson g = new Gson();
      T entity = g.fromJson(json, clazz);
      lst.add(entity);
      }
      } catch (Exception e) {
      e.printStackTrace();
      } return lst;
      }


      check also this:
      Gson TypeToken with dynamic ArrayList item type






      share|improve this answer
























        0












        0








        0






        Solved. Thanks to kan's link below the code:



        public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

        List<T> lst = new ArrayList<T>();
        try {
        // Consuming remote method
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

        for(final JsonElement json: array){
        Gson g = new Gson();
        T entity = g.fromJson(json, clazz);
        lst.add(entity);
        }
        } catch (Exception e) {
        e.printStackTrace();
        } return lst;
        }


        check also this:
        Gson TypeToken with dynamic ArrayList item type






        share|improve this answer












        Solved. Thanks to kan's link below the code:



        public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

        List<T> lst = new ArrayList<T>();
        try {
        // Consuming remote method
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

        for(final JsonElement json: array){
        Gson g = new Gson();
        T entity = g.fromJson(json, clazz);
        lst.add(entity);
        }
        } catch (Exception e) {
        e.printStackTrace();
        } return lst;
        }


        check also this:
        Gson TypeToken with dynamic ArrayList item type







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 20 '18 at 13:53









        rugby82

        159214




        159214






























            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.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • 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%2f53376727%2flisttype-and-java-lang-classcastexception-com-google-gson-internal-stringmap%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

            MongoDB - Not Authorized To Execute Command

            Npm cannot find a required file even through it is in the searched directory

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith