2016-07-31 10 views
1

Ich versuche, Angularjs zu verwenden, um eine Post-Anfrage an My Spring Mvc Controller zu senden, um sich anzumelden. Aber ich kann den Parameter nicht aus der Anfrage erhalten. dies mein Eckige js-Code ist:Angularjs Post-Methode kann nicht den Parameter im Frühjahr MVC

$scope.submit = function() { 
    $http({ 
     url: serviceURL.LoginUrl, 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     }, 
     data: { 
      phone: $scope.userName, 
      password: $scope.userPsw, 
     } 
    }).success(function (data) { 
     if (!data.state) { 
      alert(data.errorMsg); 
     } else { 
      alert('success'); 
     } 
     console.log(data); 
    }).error(function (data) { 
     console.log('服务器错误!'); 
    }); 
} 

und dies ist der Spring MVC-Controller-Code:

@RequestMapping(value = "/login", method = RequestMethod.POST) 
@ResponseBody 
public Object loginUser(Model model,User user, HttpSession session, HttpServletRequest request) { 
    String phone = request.getParameter("phone"); 
    String password = request.getParameter("password"); 
    System.out.println(phone+","+password); 
    System.out.println(user.getPhone()+","+user.getPassword()); 
    UserDTO u = userService.loginUser(phone, password); 
    session.setAttribute("loginUser",u.getUser()); 
    return u; 
} 

ich viele Ressource gesucht haben, sagten, dass sie ich den Header ändern sollte und ich habe die Header gesetzt :

@Override 
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS"); 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); 
    return true; 
} 

Eigentlich kann ich die Login-uRL nicht verlangen, aber nachdem ich setHeader, kann ich die uRL-Anforderung, aber der Parameter ist null.

Verzeihen Sie mein schlechtes Englisch, ich bin ein Neuling in StackOverFlow. Ich habe nicht konw ist es ist die gleiche Frage hier, aber ich kann die gleiche Frage finden. Vielen Dank für Ihre Ansicht.

+0

ich die gleiche Frage hier finden .aber ich arbeite nicht http://stackoverflow.com/questions/11442632/how-can-i-post-data-as-form-data -now-to-a-request-Payload? rq = 1 –

+0

Es kann eine Nachricht an den Webservice senden, aber Controller kann den Parameter nicht bekommen, aber die Header: { 'Content-Type': 'application/x-www- form-urlencoded ' }, kann mir helfen, POST-Anfrage zu senden –

Antwort

0

Es gibt zwei Punkte zu beheben. Zunächst sollten Daten in eine URL-codierte Zeichenfolge konvertiert werden. Sie können data Objekt mit $.param() Methode oder setzen params Eigenschaft instad von data zu konvertieren, so dass es wie folgt aussehen:

$scope.submit = function() { 
    $http({ 
     url: serviceURL.LoginUrl, 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     }, 
     params: { 
      phone: $scope.userName, 
      password: $scope.userPsw, 
     } 
    }).success(function (data) { 
     if (!data.state) { 
      alert(data.errorMsg); 
     } else { 
      alert('success'); 
     } 
     console.log(data); 
    }).error(function (data) { 
     console.log('服务器错误!'); 
    }); 
} 

Der zweite Punkt ist die serverseitige Controller-Methode. Hier müssen Sie die Argumente der Methode entsprechend annotieren. Erwägen Sie die Verwendung von @RequestParam Annotation.

@RequestMapping(value = "/login", method = RequestMethod.POST) 
@ResponseBody 
public Object loginUser(
    @RequestParam String phone, 
    @RequestParam String password, 
    HttpSession session, 
    HttpServletRequest request 
) { 
    System.out.println(phone + ", " + password); 
    UserDTO u = userService.loginUser(phone, password); 
    session.setAttribute("loginUser", u.getUser()); 
    return u; 
} 
0
<!--In your script--> 
var app = angular.module("myApp", []) 
.controller("myController", function($http){ 

var vm= this; 

Posting = function(name) 
{ 
    var data = 'name=' + name; 
    var url="example.htm"; 
    $http.post(url, data).then(function (response) { 
         vm.msg = response.data; 
         alert(vm.msg); 
        }); 
    } 
    }); 

    // Above is same as using GET, but here below is important 
    //Dont forget to add this config ortherwise http bad request 400 error 

    app.config(['$httpProvider', function ($httpProvider) {  
    $httpProvider.defaults.headers.post['Content-Type'] =  
    'application/x-www-form-urlencoded; charset=UTF-8'; 
    }]); 


    //In spring controller same as of GET Method 


    @RequestMapping(value="example.htm", method = RequestMethod.POST) 
    @ModelAttribute("msg") 
    public String doingPost(@RequestParam(value="name") String name){ 

    System.out.println(name); 
    return "successfully Posted"; 
    }