将变量从前端传递到后端

时间:2018-04-14 09:34:23

标签: javascript java angularjs spring

我正在使用Java(使用Spring托管)和由Javascript管理的前端完成后端的网站上工作。现在,我已经设法使用RestController将代码从后端发送到前端,但我无法设法将数据从前端发送到后端。更多地说明我尝试使用后端验证创建登录表单。

HTML表单代码:

<form ng-submit="login">
  <input type="text" ng-model="form.username" placeholder="username">
  <input type="password" ng-model="form.password" placeholder="password">
  <input type="submit" value="Login">
</form>

Javascript登录代码:

function auth($scope, $http, AppSettings, $state) {
  'ngInject';
  $scope.form = {};

  $scope.login = () => {
    $http({
      method: 'POST',
      url: AppSettings.getApiUrl('/login'),
      data: {
        user: $scope.form.username,
        password: $scope.form.password,
      },
      // data: {}
    }).then(response => {
      if (response) {
        console.log(response.data);
        localStorage.setItem('token', response.data.token);

        $state.go('main');
      }
    }).catch(error => {
      console.log(error);
    });
  };
}

Java登录处理程序:

@RestController
public class LoginHandler  {

    private static final Logger log = LoggerFactory.getLogger(LoginHandler.class);


    @RequestMapping("/login")
    public void getLoginInfo(@RequestParam Map<String,String> requestParams) {
        RestTemplate restTemplate = new RestTemplate();
        User user = restTemplate.getForObject("http://localhost:3003/auth", User.class);
        log.info(user.toString());

    }

}

1 个答案:

答案 0 :(得分:2)

使用AngularJS将数据发送到后端并使用data键设置参数时,信息实际上是在请求正文中发送而不是请求参数。

因此,在Spring MVC控制器上,您宁愿使用@RequestBody将值分配回Map<String, String>。改变这一行:

public void getLoginInfo(@RequestParam Map<String,String> requestParams) {

到此:

public void getLoginInfo(@RequestBody Map<String,String> requestParams) {