Javascript Spring为ajax POST提供HandleHttpMessageNodeReadableException

Javascript Spring为ajax POST提供HandleHttpMessageNodeReadableException,javascript,jquery,ajax,spring-mvc,Javascript,Jquery,Ajax,Spring Mvc,我正在尝试使用ajax将三个数组发送到控制器。我的jquery代码是: <script> $(document).ready(function(){ $( "#sub" ).on('click',function( event ) { var first = []; var second = []; var third = []; var k = "<c:out value='${k}'/>"; alert("

我正在尝试使用ajax将三个数组发送到控制器。我的jquery代码是:

<script>

$(document).ready(function(){
$( "#sub" ).on('click',function( event ) {
      var first = [];
      var second = [];
      var third = [];
      var k = "<c:out value='${k}'/>";
      alert("k: " + k);
     // var id = "<c:out value='${m}'/>";
     // var d = id.val();
      var id = 1;
      alert("d : " + id);
      var v = 0;
      var y = 0;
      var u = 0;
      for(var i = 0; i < k; i++){
          v = $('#s' + i).val();
          y = $('#e' + i).val();
          u = $('#h' + i).val();
          if((v != "undefined") && (v != null)){
              first.push(v);              
          }
          if((y != "undefined") && (y != null)){
              second.push(y);             
          }
         if((u != "undefined") && (u != null)){
              third.push(u);             
          }

      }
      $.ajax({          
            type : "POST",
            dataType: "json",
            contentType : 'application/json; charset=utf-8',
            url : "${pageContext.request.contextPath}/timeEntry?id=d",
            data : {            
                myData: {
                   "a1": JSON.stringify(first),
                   "a2": JSON.stringify(second),
                   "a3": JSON.stringify(third)                
                }            
            },
            success : function(response) {
                $('.timepicker').timepicker();
            },
            error : function(e) {
               alert('Error: ' + e);
            }
        }); 

      event.preventDefault();
    });


});
</script>
我的POJO课程是:

import java.util.List;

public class TimeData { 

    private List<String> a1;
    private List<String> a2;
    private List<String> a3;

    public TimeData(){

    }



    public TimeData(List<String> a1, List<String> a2, List<String> a3) {        
        this.a1 = a1;
        this.a2 = a2;
        this.a3 = a3;
    }



    public List<String> getA1() {
        return a1;
    }
    public void setA1(List<String> a1) {
        this.a1 = a1;
    }
    public List<String> getA2() {
        return a2;
    }
    public void setA2(List<String> a2) {
        this.a2 = a2;
    }
    public List<String> getA3() {
        return a3;
    }
    public void setA3(List<String> a3) {
        this.a3 = a3;
    }   


}
我不熟悉ajax。有人能帮我找出我做错了什么吗

我的pom.xml是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.neiu.scheduler</groupId>
  <artifactId>scheduler</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.2.3</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.5</version>
    </dependency>
  </dependencies>
</project>

4.0.0
com.neiu.scheduler
调度程序
0.0.1-快照
战争
src
maven战争插件
2.4
网络内容
假的
maven编译器插件
3.3
1.8
1.8
org.springframework
弹簧芯
4.2.2.1发布
org.springframework
春豆
4.2.2.1发布
org.springframework
spring上下文
4.2.2.1发布
org.springframework
SpringJDBC
4.2.2.1发布
org.springframework
弹簧网
4.2.2.1发布
org.springframework
SpringWebMVC
4.2.2.1发布
javax.servlet
jstl
1.2
mysql
mysql连接器java
5.1.38
com.fasterxml.jackson.core
杰克逊核心
2.2.3
com.fasterxml.jackson.core
杰克逊数据绑定
2.2.3
com.google.code.gson
格森
2.5
scheduler-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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">



    <context:component-scan base-package="scheduler.controllers"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>
    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsps/"></property>
    <property name="suffix" value=".jsp"></property>
    </bean>

    <mvc:resources location="/staticResources/"
        mapping="/resources/**">
    </mvc:resources>
</beans>

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>The Scheduler</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>scheduler</display-name>
    <servlet-name>scheduler</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>scheduler</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/scheduler</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
   <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
           classpath:scheduler/config/dao-context.xml 
           classpath:scheduler/config/service-context.xml

        </param-value>
  </context-param>
</web-app>

调度程序
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
调度程序
调度程序
org.springframework.web.servlet.DispatcherServlet
1.
调度程序
/
MySQL测试应用程序
数据库连接
jdbc/调度程序
javax.sql.DataSource
容器
org.springframework.web.context.ContextLoaderListener
上下文配置位置
类路径:scheduler/config/dao-context.xml
类路径:scheduler/config/service-context.xml

我怀疑ajax请求的原始格式不正确,无法在服务器上填充TimeData类。不清楚k值是否正是您想要的。我不明白这行
var k=“”我猜其目的是在Java中提供一些东西,但我不熟悉这种格式。也不清楚该值是数字还是字符串。对
console.log(k+100)的响应是什么??这些数字是求和的还是连在一起的

此外,JSON.stringify可能会将您引入歧途。我希望看到响应
console.log(JSON.stringify(first))如果放在jQuery ajax调用之前。然后在控制器中,a
System.out.println(…)验证来自Ajax调用的数据。我一点也不清楚TimeData构造函数是如何获取所需数据的


更新:提醒,数据中的类型必须为:PlainObject或String或Array。检查它的详细信息并不特别需要简单的对象,但会提供一个测试来验证。您的数据对象相当复杂。可以运行
jQuery.isPlainObject(数据)在JavaScript调用的错误部分进行测试

k
不是字符串吗?这在for循环中是如何工作的
for(var i=0;i
…什么是
k
?@zipzit可能,我用它来为我的jsp页面分配动态ID。但是循环是有效的,因为我以前检查过它,在将值放入相应数组之前显示这些值。
k
是字符串还是int?请
console.log(k+100)
您得到的是实数和还是字符串连接?当您
console.log(JSON.stringify(first))时,您看到了什么;
就在jquery ajax调用函数之前?你是对的,k是一个字符串。但即使我将其解析为整数,我仍然有问题。我在ajax调用之前按照你的建议执行了two console.log,它给出了正确的答案。104次:110:4数组[“10:00 am”,“11:00 am”,“12:00 PM”]但是控制器中的system.out.println没有打印任何内容,因为请求没有进入控制器内部。请帮助…在ajax调用后,您是否在chrome浏览器控制台上看到错误,或者系统是否将转到JS timepicker()?(提示:为每个成功和错误添加
console.log
msg?)数据以预期的格式离开浏览器吗?
console.log(data);
真的会有帮助。我能看到从Chrome开发工具复制的输出吗?这是我在调用ajax之前在console.log(myData)之后得到的:Object{a1:[“1:30 PM”,“1:30 PM”,“1:30 PM”],[a2:[“1:30 PM”,“1:30 PM”,“1:30 PM”],[a3:[“18”,“18”}这就是我在chrome浏览器控制台中遇到的错误:Object{readyState:4,responseText:“ApacheTomcat/8…line”>ApacheTomcat/8.0.26“,status:400,statusText:“Bad Request”}关闭。我说的是
console.log(数据)
最好用这些响应编辑您的原始问题,这样会使阅读更容易。您希望我将console.log(数据)放在哪里?对不起,我对ajax不太熟悉。
<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">



    <context:component-scan base-package="scheduler.controllers"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>
    <bean id="jspViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsps/"></property>
    <property name="suffix" value=".jsp"></property>
    </bean>

    <mvc:resources location="/staticResources/"
        mapping="/resources/**">
    </mvc:resources>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>The Scheduler</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>scheduler</display-name>
    <servlet-name>scheduler</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>scheduler</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/scheduler</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
   <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
           classpath:scheduler/config/dao-context.xml 
           classpath:scheduler/config/service-context.xml

        </param-value>
  </context-param>
</web-app>