[Java] प्रतिक्रिया प्रकार के लिए कोई उपयुक्त HttpMessageConverter नहीं मिला


Answers

यदि आप सर्वर मीडिया-प्रकार प्रतिक्रिया को बदल नहीं सकते हैं, तो आप अतिरिक्त समर्थन प्रकारों को संसाधित करने के लिए GsonHttpMessageConverter का विस्तार कर सकते हैं

public class MyGsonHttpMessageConverter extends GsonHttpMessageConverter {
    public MyGsonHttpMessageConverter() {
        List<MediaType> types = Arrays.asList(
                new MediaType("text", "html", DEFAULT_CHARSET),
                new MediaType("application", "json", DEFAULT_CHARSET),
                new MediaType("application", "*+json", DEFAULT_CHARSET)
        );
        super.setSupportedMediaTypes(types);
    }
}
Question

इस कोड के साथ वसंत का उपयोग करना:

List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for(HttpMessageConverter httpMessageConverter : messageConverters){
  System.out.println(httpMessageConverter);
}
ResponseEntity<ProductList> productList = restTemplate.getForEntity(productDataUrl,ProductList.class);

मुझे मिला

org.springframework.http.converter.ByteArrayHttpMessageConverter@34649ee4
org.springframework.http.converter.StringHttpMessageConverter@39fba59b
org.springframework.http.converter.ResourceHttpMessageConverter@383580da
org.springframework.http.converter.xml.SourceHttpMessageConverter@409e850a
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@673074aa
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@1e3b79d3
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@52bb1b26

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycopmany.ProductList] and content type [text/html;charset=UTF-8]

पीजो का एक स्निपेट:

@XmlRootElement(name="TheProductList")
public class ProductList {

@XmlElement(required = true, name = "date")
private LocalDate importDate;



या आप उपयोग कर सकते हैं

सार्वजनिक शून्य सेट समर्थित समर्थित मीडिया प्रकार (सूची समर्थित मीडिया प्रकार)

विधि जो कि AbstractHttpMessageConverter<T> अंतर्गत आता है, आप कुछ सामग्री प्रकार को जोड़ने के लिए पसंद करते हैं। इस तरह से MappingJackson2HttpMessageConverter canRead() MappingJackson2HttpMessageConverter canRead() आपकी प्रतिक्रिया को MappingJackson2HttpMessageConverter कर सकते हैं, और इसे अपने वांछित कक्षा में बदल सकते हैं, जो इस मामले पर उत्पादलिस्ट क्लास है।

और मुझे लगता है कि यह कदम स्प्रिंग प्रसंग के प्रारंभ के साथ आदी होना चाहिए। उदाहरण के लिए, उपयोग करके

लागू होता है ApplicationListener {...}




इसे इस्तेमाल करे:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.0</version>
</dependency>



सभी उत्तरों के अलावा, अगर आपको कुछ और (यानी application/json ) उम्मीद है, तो प्रतिक्रिया text/html में प्राप्त होने पर, यह सुझाव दे सकता है कि सर्वर साइड पर एक त्रुटि आई (404 कहें) और त्रुटि पृष्ठ आपके डेटा के बदले वापस आ गया था

तो यह मेरे मामले में हुआ। आशा है कि यह किसी का समय बचाएगा