[英]Form not posting data to Spring Controller
我真的是Spring的新人,正在尝试通过网络上的一些教程来学习。 我使用AngularJS作为前端并使用JSON将数据发布到Spring Controller创建了一个简单的Spring MVC Login App。
我的简单登录表单:
<form id="loginForm" ng-submit="login()" novalidate ng-controller="loginController" align="center">
<fieldset>
<div class="form-group col-lg-10">
<label for="username" class="control-label">Username</label>
<input class="form-control" ng-model="username" placeholder="Username" type="text">
</div>
<div class="form-group col-lg-10">
<label for="password" class="control-label">Password</label>
<input class="form-control" ng-model="password" placeholder="Password" type="password">
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-25">
<button type="submit" class="btn btn-primary">Login</button>
<button type="reset" class="btn btn-default">Reset</button>
</div>
</div>
</fieldset>
</form>
我的角度控制器:
function loginController($scope){
$scope.login=function(){
var data=$scope.fields;
var response = $http.post("rest/dologin",data);
alert(response);
};
};
我的Web.xml:
<welcome-file-list>
<welcome-file>pages/login.html</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-core.xml
</param-value>
</context-param>
<!-- Spring MVC -->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-mvc.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
我的弹簧控制器:
@Controller
public class LoginController {
@RequestMapping(value = "/dologin", method = RequestMethod.POST, headers = {"Content-type=application/json"})
protected @ResponseBody String validateUser(@RequestBody User user) {
System.out.println(user.getUsername() + " " + user.getPassword());
return "Sucess" + " " + user.getUsername();
}
}
我的分派器Servlet:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"
xmlns:context="http://www.springframework.org/schema/context">
<context:component-scan base-package="com.app.web.controllers" />
<mvc:annotation-driven />
</beans>
我试图在Angularjs控制器中放置一个警告框,它会显示,但是我的Spring Controller中的print语句无法打印。 另外,没有显示错误。
更新:
我尝试将数据发布到我的Spring控制器,它给出了正确的响应。 因此,AngularJS控制器存在问题。 我尝试使用Firebug,但未调用angular controller中的login方法,但脚本本身已加载。
更新2:
我将AngularJS控制器更改为此,现在可以检测到该控制器:
var loginApp = angular.module('loginApp',[]);
loginApp.controller('loginController', ['$scope','$http',function($scope,$http) {
$scope.login = function() {
var data=$scope.fields;
var response = $http.post('/test/rest/dologin',data).success(function(data){
alert(response);
});
}
这次,我在Firebug中收到“错误400错误的请求”错误代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 BAD_REQUEST</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /test/rest/dologin. Reason:
<pre> BAD_REQUEST</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</body>
</html>
};
}]);
服务器出现以下异常:
NotReadableException: Required request body is missing
请在这里建议我做错了什么。
我认为您的方法正在返回逻辑视图名称。 取而代之的是,您应该在validateUser方法上方使用@ResponseBody批注,然后尝试返回任何字符串,因为此批注将直接将输出作为响应发送,而不是将其作为要解析的逻辑视图发送到视图解析器。使用spring mvc将json发布到Java的方法很好解释了http://hmkcode.com/spring-mvc-json-json-to-java
在ajax调用中,您正在发送“数据”,而在控制器中,您期望用户名和密码是怎么可能的? 当您从URI发送内容时,将使用@PathVariable。 您正在发出POST请求,因此无法从URI获取数据。 USE @ModelAttribute(“ userForm”)用户用户(这是您的POJO对象,对应于带有用户名和密码的表单)
我建议您看一些例子
为什么即使不使用rest控制器,URL映射也会显示“ rest”?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.