当前位置: 首页 > 面试题库 >

期望对象数组但在对象中有一个对象

南宫云
2023-03-14
问题内容

在我目前正在从事的一个项目中,我遇到了一个角度异常Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object?

在寻找解决方案的搜索中,我直接在浏览器中输入了Web服务的URL,但令人惊讶的是,我没有收到预期的数组。

Web服务类:

@Path("/menu")
public class MenuHandler {
    @GET
    @Path("/cls")
    @Produces(MediaType.APPLICATION_JSON)
    public List<Clazz> getCLSs()    {
        Clazz clazz = new Clazz();
        Clazz.setFoo("foo");
        Clazz.setBar("bar");

        ArrayList<Clazz> clazzes = new ArrayList<>();
        clazzes.add(clazz);

        return clazzes;
    }
}

当我输入网址时,http://localhost:8080/myProject/rest/menu/cls我希望看到带有JSON对象的JSON数组:

[ {"foo": "foo", "bar": "bar"} ]

但是,相反,我收到的JSON对象的属性与我期望的JSON对象相同,没有任何数组:

{
  "clazz": {
    "foo": "foo",
    "bar": "bar"
  }
}

所以我想知道为什么没有数组,当我添加另一个Clazz对象时会发生什么。在那种情况下,我仍然会得到一个JSON对象,但是这次参数之一是我从一开始就希望拥有的JSON数组。

{
  "clazz": [
    {
      "foo": "foo",
      "bar": "bar"
    },
    {
      "foo": "foo2",
      "bar": "bar2"
    }
  ]
}

有人可以向我解释为什么会发生这种行为以及我的思维出了错吗?


问题答案:

所以我发现了问题。我能够重现它。看来您只是忘记了启用POJOMappingFeature

<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

这使用Jackson进行反序列化/序列化。如果未设置,则使用Jersey的内部JSON提供程序进行反序列化/序列化。我不确定如何配置默认提供程序,但是无论如何,只要与Jackson一起使用,都是比较安全的。

除此之外,我在上面的评论中说要测试是否正在使用Jackson。一种轻松完成此操作的方法是ContextResolvergetContext方法内部创建一个and和sop
。需要映射器时将调用此方法。因此,如果正在使用杰克逊,则应打印出

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper defaultMapper;

    public ObjectMapperContextResolver() {
        defaultMapper = new ObjectMapper();
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        System.out.println("--- getContext ---");
        return defaultMapper;
    }  
}

请注意,这也是使用Jackson序列化/反序列化进行任何配置的一种方法(只需配置映射器)。



 类似资料:
  • 问题内容: 在一个我目前正在从事的项目中,我遇到了一个角度异常: 在寻找解决方案的搜索中,我直接在浏览器中输入了Web服务的URL,但令人惊讶的是,我没有收到预期的数组。 Web服务类: 当我输入网址时,我希望看到带有JSON对象的JSON数组: 但是,相反,我收到的JSON对象的属性与我期望的JSON对象相同,没有任何数组: 所以我想知道为什么没有数组,当我添加另一个Clazz对象时会发生什么。

  • 问题内容: 问题在于确定以下符号之间的权衡: 基于JSON : 基于数组 : 关于同一问题的这篇文章,我已经决定(在前端)使用JSON对象表示法而不是对象数组,因为它符合我的要求,更好的性能和更少的浏览器代码。 但是问题在于列表本身不是静态的。我的意思是,该列表正在生成,即从DB(NoSQL)获取/存储,并通过服务器上的JavaAPI为新条目创建。我无法决定在后端应使用哪种表示法(最终也会影响UI

  • 如何在一个对象中存储对象和数组?更新一个对象内的对象和数组 const obj={key1:1,key2:2,key3:3,keys:['key1','key2','key3']};我在一次采访中得到了这个问题。现在我想在对象中添加一些新数据。2无论何时添加到对象中,都应在该主对象内的数组中更新“key_”(添加了key number)。 输出应该是这样的(你可以使用任何方法/函数/循环来更新它.

  • 我试图从JSON检查并推送对象细节中的对象。 这就是我的JSON的样子 现在,我尝试读取属性集值[1]ie;“pagenum”。在这里,我试图用name检查更多属性值。如果不存在,则将其推入该属性集中。 由于属性集[0]位于数组中,所以我在将其推入属性集[0]时没有任何问题。这里我得到了属性集中的单个对象[1]。 尝试对属性集[1]执行此操作,但引发错误- 我可以成功地实现上面的代码,如果有一个数

  • 问题内容: 假设我有一个像这样的数组 但我想将其转换为这样的对象: 能做到吗?我尝试过的所有方法都只会获得最后一个键值对。 问题答案: 如果您使用的是ES6或更高版本: