我有RESTful Web Service作为ToDo任务的存储库。
另一方面,我有Web Application使用该REST服务器来管理Todo存储库。
我尝试了从客户端到服务器的第一次调用,以便检索一些数据,但是它失败了。
REST服务器中的代码如下:
/**
* A service that manipulates ToDo's in an repository.
*
*/
@Path("/todolist")
public class ToDoWebService {
/**
* The (shared) repository object.
*/
@Inject
ToDoList toDoList;
/**
* A GET /todos request should return the ToDo's repository in JSON.
* @return a JSON representation of the ToDo's repository.
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public ToDoList getToDoList() {
return toDoList;
}
....
客户端调用(在 AngularJS 中):
(function() {
var app = angular.module('toDoApp', []);
var API_URI = "http://localhost:8080/todolist";
....
....
app.controller('addToDoCtrl', ['$scope', '$http', function($scope, $http){
$scope.getToDoList = function() {
$http.get(API_URI).
success(function(data) {
console.log(data);
}).
error(function(data, status, headers, config) {
console.log(status);
console.log(data);
console.log(headers);
console.log(config);
});
};
}]);
....
....
})();
但服务器始终返回 500(内部服务器错误)
当您单击Web应用程序的“AddToDo”选项卡时进行此调用,您可以在控制台中看到调用的结果,在这种情况下会出现错误。
但最值得注意的是,当我更改REST服务器代码时:
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getToDoList() {
return "It's me, example text";
}
然后,它正确返回字符串“It's me,example text”。
我检查了包含在中的库 我已经一遍又一遍地检查了build.gradle文件和所有server classes中包含的库,完全找不到解决方案。
这是HTTP请求 - 响应的标题,所有内容都按顺序显示,当然错误除外:
Remote Address:127.0.0.1:8080
Request URL:http://localhost:8080/todolist
Request Method:GET
Status Code:500 Internal Server Error
**Request Headers**
Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es-ES,es;q=0.8,en;q=0.6
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost
Referer:http://localhost/
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:origin, content-type, accept, authorization
Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS, HEAD
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1209600
Connection:close
Content-Length:0
Date:Fri, 31 Oct 2014 23:45:08 GMT
¿任何人都知道这个错误可能来自哪里?
答案 0 :(得分:3)
问题出在你的POJO上。您必须为ToDo
类提供零参数构造函数。从POJO到JSON的MOXy编组器需要零参数构造函数。
public class ToDo {
private String task; //Task description
private String context; //Task context
private String project; //Task project
private int priority; //Task priority
private URI href;
private int id;
// JUST ADD THIS!!!!
public ToDo(){
}
//CONSTRUCTOR
public ToDo(String task,String ctx,String proj,int pri){
this.task = task;
this.context = ctx;
this.project = proj;
this.priority = pri;
}
{... your code continue here ...}
}