2014-09-18 2 views
0

그물을 검색하고 몇 가지 해결책을 찾았지만, 여전히 같은 문제에 직면하고 있습니다.

저는 Angularjs를 프론트 엔드 엔드 스프링 레스트로 백엔드로 작성하려고합니다. $ http.post 메소를 통해 URL 리소스에 액세스 할 수 있지만 데이터 바인딩이 발생하지 않습니다. 값은 항상 null입니다.

의 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> 

내 디스패처 서블릿 구성

<?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와 공장 JS 파일

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 페이지는 회전에

@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 메소드 문은 항상 null 인쇄

내 컨트롤러 클래스 내 나머지 서비스, 전화 userFactory.saveUser() 함수를 호출합니다.

아무도 내가 잘못 가고 있다고 말할 수 있습니까?

답변

1

인수 앞에 getStateregisterUser 개의 메소드에 @RequestBody이 필요합니다. 또한 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"; 
} 
} 
관련 문제