2010-07-27 15 views
12

मैंने स्प्रिंग में एक नियंत्रक को recommended with 3.0 के रूप में जैक्सन वर्गों का उपयोग करने के लिए कोई फायदा नहीं हुआ है। मुझे जैक्सन जार फाइलें मिली हैं (जैक्सन-कोर-एएसएल-1.5.5.जर & जैक्सन-मैपर-एएसएल-1.5.5.जर) पाठ्यक्रम के मेरे वर्ग पथ में।वसंत के जेसन को उचित प्रतिक्रिया के साथ हल नहीं किया जा रहा है

appconfig.xml प्रविष्टियों के लिए, मुझे यकीन नहीं है कि मुझे इनकी आवश्यकता है। ओल 'फैशन गैर-जेसन अजैक्स लौटने से पहले मैंने उन्हें निराशा के आखिरी कार्य के रूप में वहां रखा है।

डिबग में, मैं नियंत्रक, अनुरोध प्राप्त foo वापसी देखना और फिर, फ़ायरबग, एक 406

त्रुटि संदेश इस प्रकार हैं मिलती है: लकड़हारा से जब डिबग करने के लिए सेट: ऑर्ग .springframework.web.HttpMediaTypeNotAcceptableException: स्वीकार्य प्रतिनिधित्व

नहीं मिल सका प्रतिक्रिया से: (406) संसाधन इस अनुरोध से पहचान विशेषताओं अनुरोध हेडर "स्वीकार" के अनुसार स्वीकार्य नहीं के साथ प्रतिक्रियाओं पैदा करने में ही सक्षम है() ।

मेरे appconfig.xml यहाँ है:

<!-- Configures support for @Controllers --> 
    <mvc:annotation-driven /> 

    <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --> 
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
    <map> 
     <entry key="html" value="text/html"/> 
     <entry key="json" value="application/json"/> 
    </map> 
    </property> 
    <property name="viewResolvers"> 
    <list> 
     <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/> 
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/"/> 
     <property name="suffix" value=".jsp"/> 
     </bean> 
    </list> 
    </property> 
    <property name="defaultViews"> 
    <list> 
     <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
    </list> 
    </property> 
</bean> 
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="messages"></property> 
    </bean> 

मेरे नियंत्रक

@RequestMapping(value="foo/bar", method=RequestMethod.GET) 
public @ResponseBody foo getFoo(@RequestParam String fooId) { 
    return new foo(fooId); 
} 

jsp, जहां ajax कॉल किया जाता है पर:

function addRow() { 
$.getJSON("foo/bar",{ fooId: 1} , function(data) { 
alert("it worked.");   
}); 

}

अगर कोई है तो मुझे बताएं अधिक जानकारी की जरूरत है।

+0

[वसंत JSON अनुरोध 406 (स्वीकार्य नहीं) पर अधिक कवरेज (http://stackoverflow.com/questions/7462202/spring-json-request-getting-406-not- अस्वीकार्य) – kdgregory

उत्तर

14

सभी जैक्सन सेम, और बातचीत समाधान में जेसन मैपिंग से छुटकारा पाएं। mvc:annotation-driven को जैक्सन क्रमबद्धता के लिए काम करने के लिए आवश्यक सभी चीजों को कॉन्फ़िगर करना चाहिए।

+0

धन्यवाद! मैंने जैक्सन से संबंधित सबकुछ हटा दिया और चेतावनी आई। – ClutchDude

+0

मैंने यह भी कोशिश की, लेकिन यह मेरे लिए काम नहीं किया। कोई विचार? मेरे पास जैक्सन मेरे क्लासपाथ पर है, और मैं एक सादा पुरानी वस्तु का उपयोग कर रहा हूं लेकिन यह अभी भी इसे काट नहीं रहा है। – stevebot

+0

@stevebot आप प्रासंगिक विवरण प्रदान करते हुए एक नया प्रश्न पूछ सकते हैं। – Bozho

1

स्वीकृति भेजना: एप्लिकेशन/एक्सएमएल हेडर काम नहीं करता है। लेकिन स्वीकृति भेजना: एप्लिकेशन/जेसन वास्तव में काम करता है, और जैक्सन मैपर अंदर आ जाता है। मैंने अपने 406 से छुटकारा पा लिया और मेरी सीरियलाइज्ड जावा ऑब्जेक्ट को जेसन प्रारूप में @ResponseBody से अधिक कॉन्फ़िगर नहीं किया और नया MyObject() :) धन्यवाद skaffman इस जानकारी के लिए, और काम करने वाले शीर्षलेख मान के लिए Bozho धन्यवाद: डी

+1

@RequestBody एनोटेशन पर 'produces =" एप्लिकेशन/json "' का उपयोग करने के बारे में क्या। – Ithar

1

यह प्रश्न नेट पर हर जगह पॉप अप करता है और मुझे इसे दो बार काट दिया जाता है। वसंत 3.0.6 (और 5 संभवतः) जेसन को प्रस्तुत करने में कुछ समस्याएं हैं। एक बार जब मैं 3.1.0 में बदल गया .RELEASE संस्करण eveyrything एएस आईएस काम किया। किसी भी विन्यास परिवर्तन के बिना। ध्यान देने योग्य चीजें हैं, रिटर्न विधि में @ResponseBody (जैसा कि पहले उदाहरण में है) होना चाहिए और servlet-context.xml या आपकी वसंत संदर्भ कॉन्फ़िगरेशन फ़ाइल में होना चाहिए।

0

मेरा उत्तर थोड़ा देर हो सकता है, लेकिन यह इस प्रश्न पर जाकर किसी और की मदद कर सकता है।

मैं मेरी समस्या

hibernate-validator-4.0.2 

जोड़कर हल हो गया और मुझे एक और अपवाद दिया (कक्षा अपवाद नहीं मिला: org.slf4j.LoggerFactory) जो मैं हल हो गई

slf4j-api-1.5.6.jar 

जोड़कर मैं इसे आशा किसी की मदद करेगा।

2

इसके अलावा, यकीन है कि तुम दो जैक्सन संबंधित जार फ़ाइलों को जोड़ सकते हैं।

  • jackson-core-asl-1.9.8.jar
  • jackson-mapper-asl-1.9.8.jar

संस्करण अलग हो सकता है।

+0

हाँ, यह वह चीज थी जिसे मैं याद कर रहा था। '@ RequestBody' और' @ ResponseBody' का उपयोग करने के लिए, डिफ़ॉल्ट जेसन प्रारूप होगा और जैक्सन जार को आपके pojo के रूपांतरण के लिए माना जाएगा। –

2

मुझे पता है कि यह एक पुराने धागा है, लेकिन शायद किसी ने मुझे के रूप में एक ही समस्या का सामना करेंगे। स्प्रिंग 4.0.3.RELEASE से स्प्रिंग 4.1.0.RELEASE तक किसी एप्लिकेशन को माइग्रेट करते समय मुझे यह अपवाद मिला। जैक्सन को 1.9.x से 2.4.x तक अपडेट करने के मामले में चाल चल रही थी।

3
  1. सुनिश्चित करें कि आपके द्वारा लौटाया गया POJO प्रत्येक क्षेत्र के लिए() ers प्राप्त करता है।
  2. यकीन appserver (बिलाव) पुस्तकालयों है, भले ही आप यकीन है कि अपने निर्माण प्रणाली (ग्रहण/Maven) करता हो।

मैं यह त्रुटि दो बार अब मिला है। अभी अभी मैंने अपने pojo में गेटर्स जोड़ा। 406 त्रुटि दूर चली गई और मुझे उम्मीद के अनुसार जेएसओएन मिला। मुझे लगता है कि क्योंकि मेरे फ़ील्ड पैकेज-संरक्षित (डिफ़ॉल्ट पहुंच) थे, यह उन्हें पकड़ लेगा, लेकिन मुझे नहीं लगता है। रिकॉर्ड के लिए, यदि यह महत्वपूर्ण है, तो मैंने POJO को Serializable, toString(), serialVersionUID, no-arg constructor, और स्पष्ट रचनाकारों को लागू किया है।

पहले बार मैं साफ/मंजूरी दे दी/मेरे बिलाव कैश ताज़ा किया और फिर से लोड करने के लिए इसे मजबूर करने के लिए जो कुछ भी बाकी था। मेरा मानना ​​है कि जब मैंने जैक्सन निर्भरताओं को जोड़ा, तो मैंने अपनी संकलन समय त्रुटियों को ठीक किया, लेकिन चूंकि टॉमकैट ने उन्हें याद किया, रनटाइम पर स्प्रिंग एमवीसी ने जैक्सन पुस्तकालयों की खोज नहीं की, और 406 त्रुटि को अस्वीकार्य प्रतिक्रिया प्रकार के बारे में बताया।

1

मैं एक ही अपवाद मिल गया है जब वसंत 4.x. के लिए वसंत 3.x से पलायन

मैं करने के लिए किसी और

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

मुझे कुछ नहीं के लिए जरूरत थी

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.13</version> 
    </dependency> 

से अद्यतन करने जैक्सन निर्भरता के साथ इसे हल।

+0

मेरे लिए भी काम किया। – renanlf

संबंधित मुद्दे