Angularjs对REST服务器的GET http请求返回500(内部服务器错误)

时间:2014-11-01 00:38:35

标签: angularjs rest http jax-rs

我有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

¿任何人都知道这个错误可能来自哪里?

1 个答案:

答案 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 ...}
}