【问题标题】:Angularjs GET http request to REST server returns 500 (Internal Server Error)Angularjs GET http 请求到 REST 服务器返回 500(内部服务器错误)
【发布时间】:2014-11-01 00:38:34
【问题描述】:

我有一个RESTful Web Service,它充当 ToDo 任务的存储库。

另一方面,我有一个 Web Application,它使用该 REST 服务器来管理 Todo 存储库。

我已经尝试了从客户端到服务器的第一次调用以检索一些数据,但它失败了。

REST Server中的代码如下:

/**
 * 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 Server 代码时:

    @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

¿任何可能知道此错误可能来自何处的人?

【问题讨论】:

  • ToDoList 类型是如何定义的?
  • 好的,你得到一个错误500,所以,请显示服务器日志。
  • 可能服务器不支持@Inject 的依赖注入。也许调查一下?
  • 这里是ToDoList类@PM77-1
  • 我希望我可以@denisazevedo 但服务器端没有抛出异常

标签: angularjs rest http jax-rs


【解决方案1】:

问题在于您的 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 ...}
}

【讨论】:

猜你喜欢
  • 2012-11-12
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多