当前位置: 首页 > 知识库问答 >
问题:

406中的spring 4 ajax响应不可接受

勾炳
2023-03-14

应用程序是使用Spring MVC 4、Hibernate和jQuery开发的

下面jquery AJAX调用没有给出正确的响应。。说明406错误(不可接受)

我知道这是一个非常古老而常见的问题。我尝试过:

  1. 杰克逊罐子
  2. 在请求映射注释中:生产者作为JSON
  3. 在请求映射注释中:标头为JSON
  4. 2和3的组合
  5. $. post而不是$. ajax(我知道这没什么区别)
  6. 我的bean对象(ValidationACK)有适当的setter和getter
  7. URL没有. htm
  8. 添加接受JSON标头,如接受:{json:'Application/json', xml:'Application/xml'},

JSP中的jQuery调用

 $.ajax({
                url: "register",    
                data: $('#regForm').serialize(), 
                type: "POST",
                 accept: {
                  json: 'application/json',
                  xml: 'application/xml'
            },
                success: function(result) {  
                // success message
                },
                error: function(XMLHttpRequest, textStatus, errorThrown){
                    alert(XMLHttpRequest.toString());

                }
            });

我的控制器

登录控制器

@RequestMapping(value="/register", 
            method   = RequestMethod.POST)
    public @ResponseBody 
    ValidationResponse register(@Valid @ModelAttribute("user") User user, BindingResult result, ModelMap map) {
        ValidationResponse res = new ValidationResponse();

        // Saving into DB logic
        return res; // till here I can see all the values correctly while debugging
    }

ValidationResponse bean

public class ValidationResponse {

    private String status;
    private ErrorMessage[] errorMessageList;

//getter and setter
}

Errormessage bean

public class ErrorMessage {

    private String fieldName;
    private String message;
//getter and setters
}

应用程序servlet。xml

<?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:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/context
                        http://www.springframework.org/schema/context/spring-context-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/tx
                        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

    <mvc:annotation-driven />
    <mvc:resources mapping="/assets/**" location="/assets/"  />

    <context:property-placeholder location="classpath:database.properties" />
    <context:component-scan base-package="com.app" />

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
            </props>
        </property>
        <property name="packagesToScan" value="com.app"></property>
    </bean>

    <!-- bind your messages.properties -->
    <bean class="org.springframework.context.support.ResourceBundleMessageSource"
        id="messageSource">
        <property name="basename" value="messages" />
    </bean>

</beans>

响应标题

HTTP/1.1 406 Not Acceptable
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1074
Date: Mon, 16 Mar 2015 03:56:02 GMT

请求标头

POST /app/register HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 104
Accept: text/json; text/html; charset=utf-8
Origin: http://localhost:8080
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
Content-Type: text/json; text/html; charset=UTF-8
Referer: http://localhost:8080/app/home
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

如果你需要任何其他细节,请告诉我。

共有1个答案

商兴朝
2023-03-14

添加以下依赖项

<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>
 类似资料:
  • 问题内容: 在我的Ruby on Rails应用程序中,我尝试通过POSTMAN REST客户端以Base64格式上载图像。发布图片时,我收到 406不可接受的响应 。当我检查数据库时,该图像在那里并且已成功保存。 此错误的原因是什么,我需要在标题中指定任何内容吗? 我的请求: 网址- 标头: 原始数据: 问题答案: 您的操作没有失败。 您的后端服务说您的客户端请求中的“ 接受 HTTP”标头中没

  • 问题内容: 我正在尝试使用Spring 3.0.6返回JSON响应,但是得到了406响应“ Not Acceptable”,其描述为:“此请求所标识的资源仅能够生成具有以下特征的响应:请求“接受”标头()。” 我知道之前曾问过一个非常类似的问题,但尽管进行了许多测试,但我无法使它适用于我的项目,而且我不知道自己在做什么错。 在我的Maven pom.xml中,执行以下操作: 在web.xml中,我

  • 我在Spring Boot中有一些REST Web服务(版本1.5.13) 我想使用@ControlllerAdVP来处理控制器引发的异常。 对于下面的 API testA,如果 id=123,@ControllerAdvice类能够捕获并处理异常,但是,如果 id 不等于 123,则我的程序无法将响应实体转换为 JSON,并且抛出“组织.springframework.web.HttpMedia

  • 问题内容: 我正在尝试生成一个简单的JSON响应。现在,我收到406 Not Acceptable错误。Tomcat说:“此请求标识的资源只能根据请求“接受”标头生成特性不可接受的响应。” 即使我的标题是 在tomcat / lib中,我拥有所有的Tomcat jar,Spring jar和jackson-all-1.9.0.jar。我在Tomcat 7中使用Spring 3.2.2。 我知道这个

  • 我正在尝试生成一个简单的JSON响应工作。现在我收到406不接受错误。Tomcat说“此请求标识的资源仅能够根据请求“接受”标头生成具有不可接受特征的响应。”即使我的标头是 在tomcat/lib中,我有所有的tomcat罐子、Spring罐子和jackson-all-1.9.0。罐子我将Spring 3.2.2用于Tomcat 7。 我知道这个问题已经讨论过很多次了,但是没有一个解决方案对我有用