मैंने जैक्सन कक्षाओं का उपयोग करके 3.0 के साथ अनुशंसित। मेरे पास निश्चित रूप से मेरी कक्षा पथ में जैक्सन जार फ़ाइलें (जैक्सन-कोर-एएसएल-1.5.5.जार और जैक्सन-मैपर-एएसएल-1.5.5.जार) हैं।
जहां तक appconfig.xml प्रविष्टियों का सवाल है, मुझे यकीन नहीं है कि मुझे इनकी आवश्यकता है। मैंने उन्हें ओल 'फैशन नॉन-जेसन अजाक्स पर लौटने से पहले हताशा के अंतिम कार्य के रूप में वहां रखा है।
डीबग में, मैं देखता हूं कि नियंत्रक अनुरोध प्राप्त करता है, फू वापस करता है और फिर, फ़ायरबग में, 406 प्राप्त करता है।
त्रुटि संदेश इस प्रकार हैं: डिबग पर सेट होने पर लकड़हारा से: org.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);
}
जेएसपी पर, जहां अजाक्स कॉल किया जाता है:
function addRow() {
$.getJSON("foo/bar", {
fooId: 1
}, function(data) {
alert("it worked.");
});
}
अगर कोई और जानकारी चाहिए तो मुझे बताएं।
8 जवाब
सभी जैक्सन बीन्स से छुटकारा पाएं, और वार्ता समाधानकर्ता में जेसन मैपिंग से छुटकारा पाएं। mvc:annotation-driven
को जैक्सन क्रमांकन के काम करने के लिए आवश्यक सभी चीजों को कॉन्फ़िगर करना चाहिए।
- सुनिश्चित करें कि आपके द्वारा लौटाया गया POJO प्रत्येक फ़ील्ड के लिए एक () ers है।
- सुनिश्चित करें कि एपसेवर (टॉमकैट) में पुस्तकालय हैं, भले ही आप सुनिश्चित हों कि आपकी बिल्ड सिस्टम (ग्रहण/मेवेन) करता है।
मुझे यह त्रुटि अब दो बार हुई है। अभी-अभी मैंने अपने पूजो में गेटर्स जोड़े हैं। 406 त्रुटि दूर हो गई और मुझे उम्मीद के मुताबिक JSON मिला। मुझे लगता है कि क्योंकि मेरे क्षेत्र पैकेज-संरक्षित (डिफ़ॉल्ट पहुंच) थे, यह उन्हें पकड़ लेगा, लेकिन मुझे नहीं लगता। रिकॉर्ड के लिए, यदि यह मायने रखता है, तो मैंने POJO को Serializable, toString (), serialVersionUID, नो-आर्ग कंस्ट्रक्टर और स्पष्ट कंस्ट्रक्टर को भी लागू किया।
पिछली बार जब मैंने अपने टॉमकैट कैश को साफ़/साफ़/रीफ्रेश किया था और इसे फिर से लोड करने के लिए मजबूर करने के लिए और कुछ भी किया था। मेरा मानना है कि जब मैंने जैक्सन निर्भरता को जोड़ा, तो इसने मेरी संकलन समय त्रुटियों को ठीक कर दिया, लेकिन चूंकि टॉमकैट ने उन्हें याद किया, रनटाइम पर स्प्रिंग एमवीसी ने जैक्सन पुस्तकालयों की खोज नहीं की, और अस्वीकार्य प्रतिक्रिया प्रकार के बारे में 406 त्रुटि उत्पन्न की।
साथ ही, सुनिश्चित करें कि आप जैक्सन से संबंधित दो जार फाइलें जोड़ते हैं।
jackson-core-asl-1.9.8.jar
jackson-mapper-asl-1.9.8.jar
संस्करण अलग हो सकता है।
मुझे पता है कि यह एक पुराना धागा है, लेकिन हो सकता है कि किसी को मेरे जैसी ही समस्या का सामना करना पड़े। स्प्रिंग 4.0.3 से किसी एप्लिकेशन को माइग्रेट करते समय मुझे वह अपवाद मिला। रिलीज से स्प्रिंग 4.1.0.रिलीज। मेरे मामले में जैक्सन को 1.9.x से 2.4.x तक अपडेट करने से चाल चली।
वसंत 3.x से वसंत 4.x में माइग्रेट करते समय मुझे एक ही अपवाद मिला है।
मैंने इसे जैक्सन निर्भरताओं को अद्यतन करने के साथ हल किया
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
प्रति
<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>
मेरे लिए और कुछ नहीं चाहिए था।
स्वीकृति भेजना: एप्लिकेशन/एक्सएमएल शीर्षलेख काम नहीं करता है। लेकिन स्वीकृति भेजना: एप्लिकेशन/जेसन वास्तव में काम करता है, और जैक्सन मैपर अंदर आता है। मैंने अपने 406 से छुटकारा पा लिया और मेरी धारावाहिक जावा ऑब्जेक्ट को जेसन प्रारूप में @ResponseBody से अधिक कॉन्फ़िगरेशन के साथ नहीं मिला और नया MyObject() :) धन्यवाद स्काफमैन इसके लिए जानकारी, और काम करने वाले हेडर वैल्यू के लिए बोझो को धन्यवाद: डी
यह सवाल नेट पर हर जगह आता है और मुझे एक दो बार इसने काट लिया है। स्प्रिंग 3.0.6 (और संभवतः 5) में जेसन को प्रस्तुत करने में कुछ समस्याएं हैं। एक बार जब मैं 3.1.0.रिलीज संस्करण में बदल गया तो हर चीज ने जैसा है वैसा ही काम किया। बिना किसी कॉन्फ़िगरेशन परिवर्तन के। ध्यान देने योग्य बात यह है कि, वापसी विधि में @ResponseBody होना चाहिए (जैसा कि पहले उदाहरण में है) और यह servlet-context.xml या आपकी स्प्रिंग संदर्भ कॉन्फ़िगरेशन फ़ाइल में होना चाहिए।
हो सकता है कि मेरा उत्तर थोड़ा देर से आया हो, लेकिन यह इस प्रश्न पर आने वाले किसी और की मदद कर सकता है।
मैंने अपनी समस्या को जोड़कर हल किया
hibernate-validator-4.0.2
और मुझे एक और अपवाद दिया (वर्ग अपवाद नहीं मिला: org.slf4j.LoggerFactory) जिसे मैंने जोड़कर हल किया
slf4j-api-1.5.6.jar
मुझे आशा है कि यह किसी की मदद करेगा।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।