RestyGWT + Jersey发送非空列表时错误500



假设我有一个类似于这样的Jersey资源:

@Path("/test")
public class TestResource{
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response test(List<JSONRepresentation> json){
    //some logic that gives different responses, all just Strings
    }
}

和一个RestyGWT服务,它像这样使用它:

@Path("api/test")
public interface TestService extends RestService{
@POST
public void test(List<JSONRepresentation> json, MethodCallback<String> callback);
}

事情是,当我尝试使用服务访问资源时,如果列表不是null或空,我得到一个内部服务器错误,与服务器代码没有任何关系,因为我甚至不能调试测试方法逻辑。

但是,当List为null或为空时,Resource的逻辑会做它应该做的事情,并且我可以调试它而不会出现任何问题。

JSONRepresentation的内容对这个问题似乎并不重要。

我不知道为什么会发生这种情况,我也找不到任何类似的问题,任何帮助都会非常感激。

如果您想将字符串发送回客户端,请将代码更改为:

@Path("/test")
public class TestResource{
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    public String test(List<JSONRepresentation> json){
      //some logic that gives different responses, all just Strings
    }
}

并将资源的代码更改为:

@Path("api/test")
public interface TestService extends RestService{
   @POST
   public void test(List<JSONRepresentation> json, TextCallback callback);
   }
}

好了,我总算弄明白了为什么会出现这个错误,以及如何避免它。

问题是,问题实际上是在我的json表示中,我用私有变量定义了它每个变量的getter和setter(我有一些其他json表示的集合和实例以及其他字符串和原始变量)

问题是,出于某种原因,我真的想知道更多的,如果一个变量与另一个json表示类型设置为私有,这个错误发生

所以,我只是把这个变量设置为公共的,一切都工作得很好,奇怪的部分是另一个json表示类的集合工作得很好,甚至作为私有变量(原语,字符串和日期也工作得很好)。

最新更新