Spring MVC+AngularJS-使用json填充数据
我在集成SpringMVC和AngularJS时遇到了这个问题。 我的项目中有以下控制器。 当我去医院的时候http://localhost:8181/{{projectName}}/protected/test这两个方法都应该执行。 但当我转到上面的链接时,只有第一个方法正在执行。第二个方法不执行。我不知道为什么。 在我用作指导的项目中,相同的代码正确工作Spring MVC+AngularJS-使用json填充数据,angularjs,spring,spring-mvc,Angularjs,Spring,Spring Mvc,我在集成SpringMVC和AngularJS时遇到了这个问题。 我的项目中有以下控制器。 当我去医院的时候http://localhost:8181/{{projectName}}/protected/test这两个方法都应该执行。 但当我转到上面的链接时,只有第一个方法正在执行。第二个方法不执行。我不知道为什么。 在我用作指导的项目中,相同的代码正确工作 @Controller @RequestMapping(value = "/protected/test") public class T
@Controller
@RequestMapping(value = "/protected/test")
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView welcome() {
return new ModelAndView("testPage");
}
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<?> listAll(@RequestParam int page,Locale locale) {
return createListAllResponse(page,locale);
}
更新:我完全糊涂了。我花了几天时间进行故障排除,但解决方案是添加函数调用:$scope.getRecordList 您对SpringMVC的工作方式感到困惑。Spring永远不会为每个请求调用多个RequestMapping注释方法。我在这里找到了下一条语句:第二个方法没有定义URL,但是Spring有一种方法知道它应该调用哪个方法。请注意,welcome和listAll两个方法都有一个具有相同URL的GET方法。使这两种方法不同的是属性products=“application/json”,该属性通知Spring,如果请求等待json作为响应,则应调用第二种方法。是的,将调用第二种方法。。。而不是第一个。控制器方法为请求生成响应。一个请求不能有两个响应。在这个项目中,我在调试时看到这两个方法一个接一个地调用。但在我的项目中,只有第一个方法是调用。或者,可能发生了一些重定向?也许,myController有什么问题吗?如果两个方法都被调用,那么将发送两个请求。你的控制器没有问题。
<property name="mediaTypes">
<map>
<entry key="xml" value="text/xml"/>
<entry key="json" value="application/json"/>
<entry key="html" value="text/html"/>
<entry key="less" value="text/html"/>
</map>
</property>
function myController($scope, $http) {
$scope.pageToGet = 0;
$scope.state = 'busy';
$scope.lastAction = '';
$scope.url = "/{{projectName}}/protected/test/";
$scope.record = {}
$scope.getRecordList = function () {
var url = $scope.url;
$scope.lastAction = 'list';
$scope.startDialogAjaxRequest();
var config = {params: {page: $scope.pageToGet}};
$http.get(url, config)
.success(function (data) {
$scope.finishAjaxCallOnSuccess(data, null, false);
})
.error(function () {
$scope.state = 'error';
});
}
$scope.populateTable = function (data) {
$scope.page = {source: data.records};
}
$scope.startDialogAjaxRequest = function () {
$scope.displayValidationError = false;
$("#loadingModal").modal('show');
$scope.previousState = $scope.state;
$scope.state = 'busy';
}
$scope.finishAjaxCallOnSuccess = function (data, modalId, isPagination) {
$scope.populateTable(data);
$("#loadingModal").modal('hide');
if(!isPagination){
if(modalId){
$scope.exit(modalId);
}
}
$scope.lastAction = '';
}
$scope.getRecordList();
}