假设我有一个类似于这样的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表示类的集合工作得很好,甚至作为私有变量(原语,字符串和日期也工作得很好)。