首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JAX-RS嵌套GenericEntity

JAX-RS嵌套GenericEntity
EN

Stack Overflow用户
提问于 2018-05-30 05:54:26
回答 1查看 229关注 0票数 0

我有一个JAX-RS2.0服务,它必须返回未知类型的对象列表。此外,我希望这个列表嵌套在一个包装器对象中。所以,举个例子,我想产生这个输出:

{ "objects": [ {"name":"goofy"}, {"name":"mickey"} ] }

如果对象的类型是已知的,这是一项简单的任务。我尝试了很多方法,包括使用GenericEntity,但我找不到解决方案。

我使用的是Glassfish 4.1,但是我希望解决方案独立于具体的是。

这是服务的相关代码:

@GET
@Path("{entity}")
public Response find(@PathParam("entity") String entity) {
    Class clazz = someMethod(entity);
    List list = someMethod(clazz);   //return a list of object of clazz
    WrapperClass wrapper = new WrapperClass();
    wrapper.setObjects(list);
    return Response.ok().entity(wrapper).build();
}

此代码将生成以下输出:

{ "objects": [ "object goofy", "object mickey" ] }

即对象没有被正确序列化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 05:56:33

对于Glassfish 4,默认的JSON提供程序是构建在JAXB之上的MOXy。对于JAXB,需要预先知道实体类型。因此,您得到的结果只是toString()的值,这是类型未知时的行为。

如果您想切换到使用Jackson作为JSON提供程序,它应该可以工作。Jackson不需要事先知道类型,因为它只内省所有的bean属性。要在Glassfish中使用杰克逊,您需要将依赖项添加到您的项目中,并在应用程序中注册JackonFeature

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey.version}</version>
    <scope>provided</scope>
</dependency>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50593528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档