Map Nested JSON Objects to Java Classes with Spring RestTemplate

前端 未结 7 1346
南旧
南旧 2021-02-08 12:17

I know this may be simple. However, I just can\'t get it to work.

So I am trying to use Spring RestTemplate to map my JSON data. I have following JSON response from a re

相关标签:
7条回答
  • 2021-02-08 12:37

    I know this is an old thread.

    But for anyone having the same problem, you can use MappingJackson2HttpMessageConverter for this purpose with Jackson.

    Please refer the answer given in this thread.

    0 讨论(0)
  • 2021-02-08 12:37

    Please use private List<Data> data = new AllarList<Data>( ); and please provide getters( ) and setters( ) methods in both the classes.

    Put @JsonInclude(Include.NON_EMPTY) above Data class

    Please add below dependencies under section at your main POM.xml file and do maven compile. Then I guess your issue will get resolved.

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.2.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.2.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-joda</artifactId>
                <version>2.1.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.8.8</version>
            </dependency>
    
    0 讨论(0)
  • 2021-02-08 12:47

    I ran into the same issue. Annotate with @JsonProperty:

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Data implements Serializable {
    
        @JsonProperty("Name")
        private String name;
    
        @JsonProperty("Address")
        private String address;
    
        // getters / setters for name and address
    
    }
    

    The fields of your Data class should now get populated, and you can name your fields independent of the JSON representation (e.g. name instead of Name).

    0 讨论(0)
  • 2021-02-08 12:52

    I was having a similar issue with RestTemplate not mapping nested JSON objects to my class model also, after much frustration I decided to retrieve my JSON as a String(instead of converting directly to my target object) using RestTemplate and then use the google Gson library to convert my String to my target entity.

    pom.xml

    <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
    

    code to call RestTemplate:

     ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class);
    Gson gson = new GsonBuilder().create();
    Response reponse = gson.fromJson(responseEntity , Response.class);
    

    Unfortunately I was unable to find out why my nested objects were not mapped using RestTemplate the first place but I hope this workaround helps!

    0 讨论(0)
  • 2021-02-08 12:56

    Annotate property "data" with @JsonUnwrapped as below

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Response implements Serializable {
        private String message;
        private String status;
        @JsonUnwrapped
        private List<Data> data;
    }
    
    0 讨论(0)
  • 2021-02-08 12:58

    If you need only print data, you can do this

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response = restTemplate.getForEntity(
        "your url",
        String.class);
    
    System.out.println(response);
    
    0 讨论(0)
提交回复
热议问题