javascript - 将变量从前端传递到后端

标签 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());

    }

}

最佳答案

当您使用 AngularJS 将数据发送到后端并使用 data设置参数的关键,信息实际上是在请求体中发送的,而不是请求参数。

因此,在 Spring MVC Controller 上,您宁愿使用 @RequestBody将值分配回 Map<String, String> .更改此行:

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

为此:

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

关于javascript - 将变量从前端传递到后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49830009/

相关文章:

javascript - 谷歌地图 API : How do you ensure that the Google Maps Autocomplete text is an actual address before submitting?

javascript - 使用对象表示法获取所选 ng-option 的标签

javascript - 如何为进度条制作三 Angular 形设计

java - 当 Canvas 表面 View 位于另一个 Canvas 之上时,无法将其圆角化

java - Java 1.6 中的 Epsilon

自动完成所需的 AngularJS 多个范围

javascript - 从表单预填充 Stripe Checkout 中的电子邮件

javascript - 如何使用API​​调用(jssor_slider1.$GoTo(N))

javascript - angularjs $rootScope.watch 不工作

java - 如何在不从中删除先前结果的情况下更新结果集