【问题标题】:Data is passed within ""(doublequotes) from angularJs to SpringMVC Controller数据在“”(双引号)内从 angularJs 传递到 Spring MVC 控制器
【发布时间】:2018-09-27 13:01:03
【问题描述】:

我正在将数据从 controller.js 传递到 service.js 到 SpringController.java

但是当我将 $scope.credentials.uname 数据传递给 Java 控制器时发生了奇怪的事情。

传递的数据用双引号括起来。当我在 Java 中打印值时 它被打印为“USER”而不是 USER。

由于这个原因,我无法将用户名保存在数据库中。

$scope.submitUsername = function()
        {
            $log.info("username "+$scope.credentials.uname);

这里的日志正在正确打印 chrome 控制台

用户名 SYS_USER --> 不带双引号

            loginService.fetchUserType(angular.copy($scope.credentials.uname)).then(function(data)
                {
                    if (data.loginType == 'NotValidUsername') 
                    {
                        $log.info("Failure")
                        toaster.pop('information', "Warning", 'Enter Valid UserName');
                    }
                    else
                    {
                        $log.info("Success")
                        if (data.loginType == 'database') 
                            {
                                $scope.isExternalUser = true;
                                $scope.showSubmitButton = false;
                            }
                        else
                            {
                                $scope.isExternalUser = false;
                                $scope.showSubmitButton = false;
                            }
                    }
                })


        };

service.js

fetchUserType : function(userName)
        {

            var promise = $http({
                url : "checkUserType.do",
                method : "POST",
                data : JSON.stringify(userName)
            }).success(function(data, status, header, config, statusText)
            {
            }).error(function(data, status, header, config, statusText)
            {
                if(!status === 901)
                    toaster.pop('error', status, statusText);
            }).then(function(response)
            {
                return response.data;
            })
            return promise;
        }

Java 控制器方法

 @RequestMapping(value = "/checkUserType.do", method = { RequestMethod.GET, RequestMethod.POST })
    @ResponseBody
    public Object checkUserType(@RequestBody String username,HttpServletRequest request)
    {

      log.info(" Inside checkUserType  "+username);
      User user = new User();
      user.setUserName(username);
      String userType =  loginService.checkUserType(user.getUserName());

      user.setLoginType(userType);
      return user;

    }

控制台的输出是

在 checkUserType "SYS_USER" 里面。

我应该如何传递数据以避免将这些“”(双引号)传递给 Java 控制器

【问题讨论】:

    标签: java angularjs spring spring-mvc angularjs-scope


    【解决方案1】:

    从您的 service.js 中删除 JSON.stringify(userName) 这是在您的请求周围添加双引号的原因。

    您的data 应该只是data: userName。当它被发送到您的控制器时,它将被正确转换为 json 以便您的控制器消化。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

    【讨论】:

    • 谢谢。有效 。但是我在同一个项目的其他模块中看到,他们已经完成了 JSON.stringify(data),它在没有双引号的情况下正常工作,只有数据是正确的 json 对象,例如:- { "credentials" :{ "uname":"", "密码":"" } }
    • 有些库可以去掉双引号。我相信将您的请求中的内容类型设置为application/json 也可能会这样做。不确定
    猜你喜欢
    • 2017-05-21
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多