POST w/Params返回400错误

POST w/ Params returns 400 Error

本文关键字:错误 返回 Params POST      更新时间:2023-09-26

试图在springmvc:中发送对此方法的后响应

@RestController
public class LoginRController {
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login_Post(@RequestParam(value = "user", required = true) String username,   @RequestParam(value = "pass", required = true) String password) {
        return ("Login: "+username+", "+password);
    }
}

所以我最初尝试了:

控制器

App.controller('LoginController', [
        '$scope',
        'LoginService',
        function($scope, LoginService) {
            var self = this;
            self.authUser = function() {
                LoginService.authUser($('#inputEmail').val(),
                        $('#inputPassword').val()).then(function(d) {
                    console.log("This happened");
                }, function(errResponse) {
                    console.error('Error while fetching Currencies');
                });
            };
        } ]);

服务

App.factory('LoginService', [
        '$http',
        '$q',
        function($http, $q) {
            return {
                authUser : function(username, password) {
                    return $http.post(
                            'login',
                            "user=" + encodeURIComponent(username) + "&pass="
                                    + encodeURIComponent(password)).then(
                            function(response) {
                                return response.data;
                            }, function(errResponse) {
                        console.error('Error @ authUser');
                        return $q.reject(errResponse);
                    })
                }
            }
        } ]);

我发现它总是返回一个400错误,这意味着所需的字段不匹配。。。这很奇怪,因为我可以很好地使用Jquery$post()。

此外,我在这个线程上尝试了这里的一切,AngularJs$http.post()不发送数据,以及我如何在AngularJs中用$http发布URL编码的表单数据?

也尝试过:

'use strict';
App.factory('LoginService', [ '$http', '$q', function($http, $q) {
    return {
        authUser : function(username, password) {
            return $http.post('login', {
                params : {
                    user : username,
                    pass : password
                }
            }, {
                headers : {
                    'Content-Type': 'application/x-www-form-urlencoded'
                }
            }).then(function(response) {
                return response.data;
            }, function(errResponse) {
                console.error('Error @ authUser');
                return $q.reject(errResponse);
            })
        }
    }
} ]);

使用上一个示例作为基线,您需要:1)删除params和2)对数据进行url编码(此处使用jQuery $.param()):

return {
    authUser: function(username, password) {
        return $http.post('login',  $.param({
            user: username,
            pass: password
        }), {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        }).then(function(response) {
            return response.data;
        }, function(errResponse) {
           console.error('Error @ authUser');
           return $q.reject(errResponse);
        })
    }
}

这一切都在这里解释。