Angularjs $ http.post数据不与后端pojo绑定

时间:2014-09-18 06:57:08

标签: java angularjs spring jsp

我在网上搜索并找到了一些解决方案,但我仍面临同样的问题。

我正在尝试创建一个Web应用程序,将Angularjs作为前端弹簧支撑作为后端。 我能够通过$ http.post方法访问url资源,但是数据与pojo的绑定不会发生。值始终为空。

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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-  app_2_5.xsd" 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>login</display-name>
<servlet>
    <servlet-name>springws</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springws</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

我的调度程序servlet配置

<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
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">

<context:component-scan base-package="com.junaid.spring.webservice" />

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />

 <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="/WEB-INF/jdbc.properties" />

 <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}"
    p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
    p:password="${jdbc.password}" />

 <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${jdbc.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
            <!-- Drop and re-create the database schema on startup -->
            <prop key="hbm2ddl.auto">create</prop>
        </props>
    </property>
</bean>   
</beans>

Angualrjs控制器文件

login.controller('RegisterController',['$scope','userFactory', function($scope, userFactory) {

$scope.user;

$scope.saveUser = function(){
    userFactory.saveUser($scope.user);
};
}]);

Angularjs factory js file

angular.module('login')
.factory('userFactory' , ['$http', function($http){

var userFactory= {};

userFactory.authenticate = function(user){
    console.log(user.name);
    console.log(user.password);
};

userFactory.saveUser = function(user){
    console.log(user.name);
    console.log(user.password);
    console.log(user.phone);
    console.log(user.email);
     $http.post('rest/register', user).success(console.log("registered"));
};

userFactory.forgotPassword = function(user){
    console.log(user.name);
};

return userFactory;
}]);

Jsp页面调用userFactory.saveUser()函数,该函数又调用我的休息服务,

我的控制器类

@Controller
public class UserController {

@RequestMapping(value = "/authenticate", method = RequestMethod.GET)
public  @ResponseBody String getState(UserData ud) {
    System.out.println(ud.getPassword());
    return "true";
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public  @ResponseBody String registerUser(Users ud) {
    System.out.println(ud.getPassword());
    return "true";
}
}

println语句始终打印为空。

谁能告诉我哪里出错了?

1 个答案:

答案 0 :(得分:1)

在论证之前,您需要@RequestBodygetState方法中的registerUser。此外,getState必须是POST方法。

@Controller
public class UserController {

@RequestMapping(value = "/authenticate", method = RequestMethod.POST)
public  @ResponseBody String getState(@RequestBody UserData ud) {
    System.out.println(ud.getPassword());
    return "true";
}

@RequestMapping(value = "/register", method = RequestMethod.POST)
public  @ResponseBody String registerUser(@RequestBody Users ud) {
    System.out.println(ud.getPassword());
    return "true";
}
}