【发布时间】:2017-11-05 15:06:09
【问题描述】:
我正在尝试了解有关使用 AngularJS 和 Java 创建 SPA 的更多信息。我按照教程here 进行操作,除了一个错误外,我设法让它工作。当我创建一个新的待办事项然后返回到待办事项列表时,我收到以下错误。
angular.js:8109 POST http://localhost:8080/api/v1/todos 404(未找到)
控制台输出如下
HEJ ERROR
app.js:51 Error createTodo <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 </title>
</head>
<body>
<h2>HTTP ERROR: 404</h2>
<p>Problem accessing /api/v1/todos. Reason:
<pre> Not Found</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
</body>
</html>
为什么我添加了另一个待办事项后它不起作用?
角度代码
var app = angular.module('todoapp', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute'
]);
app.config(function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'views/list.html',
controller: 'ListCtrl'
}).when('/create', {
templateUrl: 'views/create.html',
controller: 'CreateCtrl'
}).otherwise({
redirectTo: '/'
})
});
app.controller('ListCtrl', function ($scope, $http) {
$http.get('/api/v1/todos').success(function (data) {
$scope.todos = data;
}).error(function (data, status) {
console.log('Error listctrl ' + data)
})
$scope.todoStatusChanged = function (todo) {
console.log(todo);
$http.put('/api/v1/todos/' + todo.id, todo).success(function (data) {
console.log('status changed');
}).error(function (data, status) {
console.log('Error todostatuschanged' + data)
})
}
});
app.controller('CreateCtrl', function ($scope, $http, $location) {
$scope.todo = {
done: false
};
$scope.createTodo = function () {
console.log($scope.todo);
$http.post('/api/v1/todos', $scope.todo, $location).success(function (data) {
console.log("HEJ")
$location.path('/');
}).error(function (data, status) {
console.log("HEJ ERROR")
console.log('Error createTodo ' + data)
})
}
});
Java 代码:
import static spark.Spark.get;
import static spark.Spark.post;
import static spark.Spark.put;
public class TodoResource {
private static final String API_CONTEXT = "/api/v1";
private final TodoService todoService;
public TodoResource(TodoService todoService) {
this.todoService = todoService;
setupEndpoints();
}
private void setupEndpoints() {
post(API_CONTEXT + "/todos", "application/json", (request, response) -> {
todoService.createNewTodo(request.body());
response.status(201);
return response;
}, new JsonTransformer());
get(API_CONTEXT + "/todos/:id", "application/json", (request, response)
-> todoService.find(request.params(":id")), new JsonTransformer());
get(API_CONTEXT + "/todos", "application/json", (request, response)
-> todoService.findALL(), new JsonTransformer());
put(API_CONTEXT + "/todos/:id", "application/json", (request, response)
-> todoService.update(request.params(":id"), request.body()), new JsonTransformer());
}
}
【问题讨论】: