java - MIME मीडिया प्रकार के साथ संगत पंजीकृत संदेश निकाय पाठक हैं: आवेदन/जेसन; वर्णसेट=यूटीएफ-8




json rest (2)

मैं क्लाइंट साइड में सर्वर पक्ष और जर्सी एपीआई में स्प्रिंग रेस्ट एपीआई का उपयोग कर रहा हूं।

मैं एक स्क्रीन बना रहा हूँ जहां यह पिछले 5 ग्राहकों को लेनदेन के एवज में लाएगा।

सर्वर साइड से मैं RedeemTransactionDetails की सूची लौट रहा हूं और क्लाइंट साइड में उसी को स्वीकार कर रहा हूं।

मुझे सर्वर साइड कोड डिबग किया गया था, यह वैध सूची देता है, और क्लाइंट साइड रिव्यू कोड 200 में है, जबकि इकाई प्राप्त करते समय मुझे क्लाइंट साइड से त्रुटि मिल रही है

सर्वर साइड:

    @RestController
    @RequestMapping("/rest/api")
    public class CustomerRestController {
            @Autowired private CustomerService customerService;

            @RequestMapping(value="/redeemTransactionList/{clientId}/{mobileNumber}/{numOfTransaction}" , method=RequestMethod.POST , produces = "application/json; charset=UTF-8")
            public @ResponseBody List<RedeemTransactionDetails> redeemTransaction(@PathVariable(value = "clientId") int clientId, @PathVariable(value = "mobileNumber") String mobileNumber , @PathVariable(value="numOfTransaction") int numOfTransaction) {
            LOG.debug("We are in redeemTransaction method for user {} " , clientId);
            List<RedeemTransactionDetails> redeemList = null ;
            try {
                redeemList =  customerService.redeemTransactionList(clientId, mobileNumber,numOfTransaction);

            } catch (Exception e) {
                LOG.debug("Excption while fetching redeemTransaction ");
            }
            return  redeemList;
        }
    }

ग्राहक की ओर :

public List<RedeemTransactionDetails> getRedeemTransactions(String mobileNumber, String clientId, String numberOfTransaction) {
    log.debug("inside authenticate() ");
    List<RedeemTransactionDetails> result = null; 
    try{
        webResource = client.resource(uri + "/redeemTransactionList").path(clientId).path(mobileNumber).path(numberOfTransaction) ;
        ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class);
        if (response.getStatus() != 200) {
            log.debug("response.getStatus() : " +  response.getStatus() );  
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
         } 
        response.getType() ;
        result = (List<RedeemTransactionDetails>) response.getEntity(RedeemTransactionDetails.class);
        log.debug("user Details " + result);
    }
    catch(Exception e){
        log.debug(e);
    }
    return result ;
}
}

नोट: मैंने pom xml फ़ाइल में निम्नलिखित निर्भरता का इस्तेमाल किया था

<dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.19.3</version>
    </dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.6</version>
</dependency>

संपादित करें:

त्रुटि संग्रह

SEVERE: A message body reader for Java class com.prom.via.rest.dto.RedeemTransactionDetails, and Java type class com.prom.via.rest.dto.RedeemTransactionDetails, and MIME media type application/json;charset=UTF-8 was not found
Feb 23, 2017 4:52:17 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader

त्रुटि इंगित करती है कि प्रदाता पैकेज स्कैन करने के लिए जर्सीक्लिएन्ट को ठीक से कॉन्फ़िगर नहीं किया गया हो। अपने वेब। एक्सएमएल की जांच करें यदि 'jersey.config.server.provider.packages' संपत्ति को 'com.prom.via.rest.dto' पैकेज को शामिल करने के लिए कॉन्फ़िगर किया गया है जिसमें आपका JAXB वर्ग शामिल हैं

<servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <!-- Register resources and providers under com.prom.via.rest.dto package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.prom.via.rest.dto</param-value>
    </init-param>
</servlet>

इसके अलावा, जैसा कि स्काईवॉकर ने संकेत दिया है कि क्या RedeemTransactionDetails का @XmlRootElement एनोटेशन के साथ एनोटेट किया गया है या नहीं।


यह समस्या समस्या ज्ञात है और विभिन्न उत्तर पहले से ही स्टैक ओवरफ्लो में उपलब्ध है।

अब मैं आपको अपनी समस्या को हल करने के लिए कुछ सुझावों का पालन करने का सुझाव दे रहा हूं।

सुझाव # 1:

आप अपने pom.xml फ़ाइल में निम्न निर्भरता का उपयोग कर genson jar फ़ाइल जोड़ सकते हैं

<dependency>
    <groupId>com.owlike</groupId>
    <artifactId>genson</artifactId>
    <version>1.4</version>
</dependency>

दस्तावेज़ीकरण यहां पाया जा सकता है: https://owlike.github.io/genson/

फिर अपनी परियोजना को साफ करें और निर्माण करें और फिर चलाएं।

संसाधन लिंक: https://.com/a/25754441/2293534

सुझाव # 2:

आप अपने pom.xml फ़ाइल में jersy बंडल जार फ़ाइल जोड़ सकते हैं।

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.19.3</version>
</dependency>

यह समस्या को कभी-कभी हल कर सकती है

संसाधन लिंक: https://.com/a/23192776/2293534

सुझाव # 3:

अपनी @XmlRootElement जाँच करें @XmlRootElement एनोटेशन या नहीं। यदि नहीं, तो कृपया इसे जोड़ दें।

संसाधन लिंक: https://.com/a/7388605/2293534

सुझाव # 4:

जोन्ब्रोस ने सुझाव दिया है कि मेवेन के विधानसभा प्लगइन का उपयोग करने के बजाय छाया प्लगइन का उपयोग करें!

आप यहां से पढ़ें समस्या और पूर्ण समाधान पढ़ सकते हैं: http://jersey.576304.n2.nabble.com/issue-with-POST-when-packaging-into-jar-td5460103.html

संसाधन लिंक: https://.com/a/4955831/2293534





response