जबकि मैं स्ट्रिंग रिस्पांस टाइप के साथ RestTemplate का उपयोग करता हूं, यह सामान्य चलता है।

ResponseEntity<String> response = restTemplate.postForEntity(uri,
request, String.class);

वापसी जेसन स्ट्रिंग

{"code":0,"message":null,"data":"{\"companyId\":\"1\",\"tinyIdList\":[\"2\"],\"carId\":\"3\"}"}

जबकि मैं प्रतिक्रिया को बचाने के लिए जावा पीओजेओ का उपयोग करता हूं, जावा ऑब्जेक्ट के गुण सभी शून्य हैं

ResponseEntity<queryTinyListResponse> responseEntity = restTemplate.postForEntity(uri, request, queryTinyListResponse.class);

नतीजा:

body:queryTinyListResponse{data=Data{tinyIdList=[], carId='null', companyId='null'}, code=0, msg='null'}

QueryTinyListResponse.class:

@JsonIgnoreProperties(ignoreUnknown = true)
public class queryTinyListResponse implements Serializable {
    public class Data{
        private String companyId;
        private List<String> tinyIdList=new ArrayList<String>();
        private String carId;
        //getter setter getCompanyId() etc..

    }
    public Data getData() {
        return data;
    }

    //getter setter
    private  Data data;
    private int code;
    private String msg;
}
0
user8416478 29 जून 2018, 10:36

2 जवाब

सबसे बढ़िया उत्तर

मुझे इस प्रश्न का उत्तर मिल गया है। मुझे static इनर क्लास यहां

यह पाया !!। समाधान वास्तव में काफी अजीब है। समस्या आंतरिक वर्गों से आती है। इस प्रकार थी पुरानी संरचना :

public class MetaData{
  ...
  public class Data {

     ....

     public class Item{
       ...
     }
   }
}

आंतरिक वर्गों को static होना चाहिए क्योंकि जैक्सन सीधे एक आंतरिक वर्ग को तुरंत चालू नहीं कर सकता है।

public class MetaData{
  ...
  public static class Data {

     ....

   public static class Item{
       ...
     }
   }
}

सब कुछ ठीक काम किया। आशा है कि इससे मदद मिली!

0
Mohammad Kanan 11 जुलाई 2018, 10:56

आप अपने application.properties/yml में इस कॉन्फ़िगरेशन का उपयोग कर सकते हैं: spring.jackson.default-property-inclusion=non_null और फिर मैंने एक समान कॉन्फ़िगरेशन को पुन: पेश करने का प्रयास किया और मुझे आपकी प्रतिक्रिया स्ट्रिंग में मिला

{"code":0,"message":null,"data":"{\"companyId\":\"1\",\"tinyIdList\":[\"2\"],\"carId\":\"3\"}"}

एक जेसन सिंटैक्स त्रुटि यह {\"code\":0,\"message\":null,\"data\":{\"companyId\":\"1\",\"tinyIdList\":[\"2\"],\"carId\":\"3\"}} होनी चाहिए अन्यथा डेटा फ़ील्ड को एक स्ट्रिंग के रूप में देखा जाता है न कि डेटा ऑब्जेक्ट।

यदि आप स्वयं को आजमाना चाहते हैं तो आप इस कोड को आजमा सकते हैं:

package com.example.jacksondemo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.RequestEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class JacksonDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(JacksonDemoApplication.class, args);
    }
}

@lombok.Data
@JsonIgnoreProperties(ignoreUnknown = true)
class QueryTinyListResponse implements Serializable {

    //getter setter
    private  Data data;
    private int code;
    private String msg;
}

@lombok.Data
class Data implements Serializable {
    private String companyId;
    private List<String> tinyIdList=new ArrayList<String>();
    private String carId;
    //getter setter getCompanyId() etc..

}

@RestController
class QueryTinyListResponseController {

    @PostMapping
    public String query(){
        return "{\"code\":0,\"message\":null,\"data\":{\"companyId\":\"1\",\"tinyIdList\":[\"2\"],\"carId\":\"3\"}}";

    }
}


@RestController
class QueryTinyListResponseControllerClient {

    @GetMapping("/client")
    public QueryTinyListResponse query(){
        RestTemplate restTemplate = new RestTemplate();

        return restTemplate.postForEntity("http://localhost:8080/", RequestEntity.EMPTY, QueryTinyListResponse.class).getBody();
    }
}

आवेदन.गुण

spring.jackson.default-property-inclusion=non_null
0
Valerio Vaudi 29 जून 2018, 11:44