当我在列表中只收到一个项目时出现此错误。我在服务器端 REST Web 服务中使用 Jersey,只有当 List 返回一个元素并且它有 0 个元素 时,我才会得到错误,我得到 java.lang.NullPointerException 但是当它有多个时,它会完美地工作,这就是我的做法:
@GET
@Path("getproject")
@Produces(MediaType.APPLICATION_JSON)
public List<Project> getPagedProjects(
@QueryParam("offset") int offset,
@QueryParam("limit") int limit,
@QueryParam("searchKey") String searchKey) throws Exception {
System.out.println("Returning Paged Project ");
return projectService.getPagedProjects(offset, limit, searchKey);
}
为什么 Jersey 不发送包含单个项目的列表?这是 Jersey 的错误? 有没有办法让它始终序列化为数组?
当网络服务返回 0 元素时,这是我的 JSON 数据:
null
当 Web 服务返回 1 个元素时,这是我的 JSON 数据:
{
"project": {
"abbreviation": "abc",
"customer": "customer1",
"description": "description3",
"icon": "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",
"name": "projectname3",
"plannedEndDate": "2012-05-23T00:00:00+01:00",
"plannedStartDate": "2012-05-23T00:00:00+01:00",
"projectStatus": {
"name": "In Progress"
},
"realEndDate": "2012-05-23T00:00:00+01:00",
"realStartDate": "2012-05-23T00:00:00+01:00"
}
}
当 Web 服务返回超过 1 个元素时,这是我的 JSON 数据:
{
"project": [
{
"abbreviation": "abd",
"customer": "customer1",
"description": "description1",
"icon": "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",
"name": "projectname1",
"plannedEndDate": "2012-05-25T00:00:00+01:00",
"plannedStartDate": "2012-05-23T00:00:00+01:00",
"projectStatus": {
"name": "Opened"
},
"realEndDate": "2012-05-25T00:00:00+01:00",
"realStartDate": "2012-05-23T00:00:00+01:00"
},
{
"abbreviation": "bd",
"customer": "customer1",
"description": "description2",
"icon": "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",
"name": "projectname2",
"plannedEndDate": "2012-05-23T00:00:00+01:00",
"plannedStartDate": "2012-05-23T00:00:00+01:00",
"projectStatus": {
"name": "Closed"
},
"realEndDate": "2012-05-23T00:00:00+01:00",
"realStartDate": "2012-05-23T00:00:00+01:00"
},
{
"abbreviation": "abc",
"customer": "customer1",
"description": "description3",
"icon": "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",
"name": "projectname3",
"plannedEndDate": "2012-05-23T00:00:00+01:00",
"plannedStartDate": "2012-05-23T00:00:00+01:00",
"projectStatus": {
"name": "In Progress"
},
"realEndDate": "2012-05-23T00:00:00+01:00",
"realStartDate": "2012-05-23T00:00:00+01:00"
}
]
}
在 android 端,我像这样反序列化 JSON 响应:
Gson gson = new Gson();
final ProjectContainer container = gson.fromJson(resultat, ProjectContainer.class);
final ListView lv = (ListView) findViewById(R.id.list);
adaptateur = new ProjectAdapter(ProjectActivity.this, R.layout.ligne_project, container);
lv.setAdapter(adaptateur);
这是我的 ProjectContainer 类:
public class ProjectContainer {
@SerializedName("project")
List<Project> projects ;
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
}
非常感谢您帮助解决这个问题。提前致谢
最佳答案
你的问题结果对我来说真的很奇怪......看来 Jersey 的单元素数组的 JSON 序列化一定有问题......如果你谷歌“Jersey JSON single element arrays”你会发现同样的问题,例如 here或 here .我对 Jersey 了解不多,所以我帮不了你...
也就是说,我可以建议在 Gson 中使用手动解析的解决方法,以使您的解析适应 2 种不同的响应(对象或数组)。你可以这样做:
//manually parsing until get the "project" element...
JsonParser parser = new JsonParser();
JsonObject rootObejct = parser.parse(yourJsonString).getAsJsonObject();
JsonElement projectElement = rootObejct.get("project");
Gson gson = new Gson();
List<Project> projectList = new ArrayList<>();
//Check if "project" element is an array or an object and parse accordingly...
if (projectElement.isJsonObject()) {
//The returned list has only 1 element
Project project = gson.fromJson(projectElement, Project.class);
projectList.add(project);
}
else if (projectElement.isJsonArray()) {
//The returned list has >1 elements
Type projectListType = new TypeToken<List<Project>>() {}.getType();
projectList = gson.fromJson(projectElement, projectListType);
}
//Now you have a List<Project> projectList with one or many Project elements,
//depending on the response...
请注意,您不需要类 ProjectContainer。
像这样的东西应该对你有用,但显然最好的办法是修复序列化问题!
关于java - GSON 需要 BEGIN_ARRAY 但实际是 BEGIN_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654042/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/