我正在使用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());
}
}
答案 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) {