Failed to load resource: the server responded with a status of 406 (Not Acceptable)

14,512

Solution 1

The exception occurs when you're trying to set the mediaTypes property to the ContentNegotiatingViewResolver because the value is not a plain string like "text/html" as you thought. It's a different type MediaType

Instead specify something like this.

<bean id="atomXml" class="org.springframework.http.MediaType">
<constructor-arg><value><![CDATA[application/atom+xml]]></value></constructor-arg>
</bean>

and other beans similarly.


When you want to set the mediaTypes, inject the beans created above to the ContentNegotiatingViewResolver.

<property name="mediaTypes">
    <map>
      <entry key="atom" value-ref="atomXml"/>
    </map>
</property>

Defining other relevant beans and fixing any syntax issues related to the above configuration are left as an exercise to you.

Solution 2

it is better to reference constants in MediaType class

<constructor-arg>
    <map>
        <entry key="json">
            <util:constant static-field="org.springframework.http.MediaType.APPLICATION_JSON_VALUE" />
        </entry>
        <entry key="xml">
            <util:constant static-field="org.springframework.http.MediaType.APPLICATION_ATOM_XML_VALUE" />
        </entry>
    </map>
</constructor-arg>

you will need to include util schema as well

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">

Solution 3

you should add a reference to ContentNegotiatingViewResolver. Replace

<mvc:annotation-driven />

by

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />

and add the id to the bean definition:

<bean id="contentNegotiationManager"  class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">

Also, you need to update the schema location to 3.2.

xsi:schemaLocation="
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
Share:
14,512

Related videos on Youtube

Tiny
Author by

Tiny

Just an orphan kid and have no more to say. Three things in general, cannot be avoided (at least I can never) Mother Mother-tongue Mother-land. They are always unique. I'm a family-less boy. My family was hunted leaving me all alone when my house targeted and deliberately set on a fire by a mob during a nonsense communal riot but I was survived by a rescue team with the help of firemen. As a survival, I didn't know whether it was my fortune or misfortune but when I recovered, the rescue team came to my home, one day. One of the members gave me a piece of paper in my hand in which the following text was written. lifeisnowhere. He asked me to read it carefully and I could hardly interpret the text as Life is now here, instead of Life is nowhere. All of them gave me a cute smile and went away and I decided to live peacefully and hopefully on their saying from then onwards and very soon. Because of this tragedy, I'm alone couldn't join a school but a curiosity to learn something made me a self-learner. I'm indeed a self-learner, so I'm likely not able to answer any questions on this site right now. In the field of computer science, my self-study mainly includes, QBASIC, C, C++, C#, VB, Java, JavaScript, PHP and a little about ASP.NET. Oracle, MySQL and MSSQL-Server with DBMS. and other theoretical subjects. I'm currently dealing with - Android and Java EE including Servlet, JSP-JSTL/EL (with Spring and Struts with ORM models JPA/Hibernate) and JSF.

Updated on September 15, 2022

Comments

  • Tiny
    Tiny over 1 year

    Based on my previous question, I have upgraded the Spring framework from 3.0.2 to 3.2.0 for the reason mentioned in this question (Spring 3.0.2 causes problems in uploading multiple files as there was a long standing bug).

    With the newer version everything works fine exception JSON. While responding, Google chrome shows this error.

    Failed to load resource: the server responded with a status of 406 (Not Acceptable)

    I have tried to do as specified here in the dispatcher-servlet.xml file like,

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
      <property name="mediaTypes">
        <map>
          <entry key="atom" value="application/atom+xml"/>
          <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/jsp/"/>
            <property name="suffix" value=".jsp"/>
          </bean>
        </list>
      </property>
      <property name="defaultViews">
        <list>
          <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
        </list>
      </property>
    </bean>
    

    and it ends with the following exception upon saving the xml file.

    java.lang.ClassCastException java.lang.String cannot be cast to org.springframework.http.MediaType


    The full contents of the dispatcher-servelet.xml file is as follows, if someone needs to see.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
    
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
    
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    
        <context:component-scan base-package="controller" />
        <context:component-scan base-package="validatorbeans" />
        <mvc:annotation-driven />
    
    
    
    
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
      <property name="mediaTypes">
        <map>
          <entry key="atom" value="application/atom+xml"/>
          <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/jsp/"/>
            <property name="suffix" value=".jsp"/>
          </bean>
        </list>
      </property>
      <property name="defaultViews">
        <list>
          <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
        </list>
      </property>
    </bean>
    
        <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
        <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="index.htm">indexController</prop>
    
                </props>
            </property>
        </bean>
    
    <!--<bean id="viewResolver"
           class="org.springframework.web.servlet.view.InternalResourceViewResolver"
           p:prefix="/WEB-INF/jsp/"
           p:suffix=".jsp" />
    
           Initially this bean was mentioned like this was given a comment. It is specified as above-->
    
        <bean name="indexController"
              class="org.springframework.web.servlet.mvc.ParameterizableViewController"
              p:viewName="index" />
    </beans>
    

    How to resolve this exception? Google search results of this exception could not bring me to a specific reference.


    EDIT:

    According to this configuration, I have now the following XML mapping.

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="contentNegotiationManager">
            <bean class="org.springframework.web.accept.ContentNegotiationManager">
                <constructor-arg>
                    <bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
                        <constructor-arg>
                            <map>
                                <entry key="json" value="application/json"/>
                                <entry key="xml" value="application/xml"/>
                                <!--<entry key="html" value="text/html"/>
                                <entry key="atom" value="application/atom+xml"/-->
                            </map>
                        </constructor-arg>
                    </bean>
                </constructor-arg>
            </bean>
        </property>
    
    
        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
    
                <!-- XML View -->
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg>
                        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                            <property name="packagesToScan">
                                <list>
                                    <value>documentLoader.domain</value>
                                </list>
                            </property>
                        </bean>
                    </constructor-arg>
                </bean>
            </list>
        </property>
    </bean>
    

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />
    

    and the ClassCastException disappeared but JSON still doesn't work. I'm still getting the same error,

    Failed to load resource: the server responded with a status of 406 (Not Acceptable)

    What else is still remaining? There is one jira issue still can be seen.

    NOTE: I have Jackson 1.9.8 (its download page) library on the classpath. With Jackson 2.1.1, it doesn't work throwing the following exception at runtime.

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot create inner bean 'org.springframework.web.servlet.view.json.MappingJacksonJsonView#bb314f' of type [org.springframework.web.servlet.view.json.MappingJacksonJsonView] while setting bean property 'defaultViews' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.view.json.MappingJacksonJsonView#bb314f' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.servlet.view.json.MappingJacksonJsonView]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/map/ObjectMapper

    Because Jackson 2.1.1 has the class ObjectMapper in another package - com.fasterxml.jackson.databind.ObjectMapper. What is the way?