我正在开发一个网站,该网站的后端使用 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/