Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Jersey资源返回超类_Java_Rest_Jersey - Fatal编程技术网

Java 从Jersey资源返回超类

Java 从Jersey资源返回超类,java,rest,jersey,Java,Rest,Jersey,我正在做一件非常简单的事情,我想这应该行得通。我有这样一个资源: @GET @Produces(MediaType.APPLICATION_JSON) @Path("{nodeType}/{uuid}") public Object getResourceInfo(@PathParam("nodeType") String nodeType, @PathParam("uuid") String uuid,

我正在做一件非常简单的事情,我想这应该行得通。我有这样一个资源:

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{nodeType}/{uuid}")
public Object getResourceInfo(@PathParam("nodeType") String nodeType,
                              @PathParam("uuid") String uuid,
                              @Context SecurityContext authority) { ...
注意,我正在返回类型对象。这是因为根据调用(这里取决于nodeType参数),我希望返回不同的具体类(始终是@XmlRootElement),并将其编组到响应中

然而,这是行不通的。我得到的例外是:

Exception Description: A descriptor for class com.mycompany.XmlElementTypeInstance was not found in the project.  For JAXB, if the JAXBContext was bootstrapped using TypeMappingInfo[] you must call a marshal method that accepts TypeMappingInfo as an input parameter.
如果我将对象更改为单个子类,它就会工作。但我希望它能够处理任何子类,XmlElementTypeInstance,XmlElementTypeInstance2,等等

我尝试创建一个公共接口,所有XmlElementTypeInstance子类都是从该接口派生的,但是我只在接口中获得这些属性,而不是子类中的额外属性。使用@XmlElementRef并将所有可能的属性添加到公共接口非常难看,无法正确生成我想要的JSON,因此请不要建议这样做。=)


有没有办法做到这一点?它似乎是简单、基本、必要的功能。。。我使用过的任何其他REST框架,都没有问题……

结果证明,解决方案很简单(不过,必须阅读JSR而不是实际的Jersey文档!)

将对象设置为实体并返回响应(JSR339的第3.3.3节)将强制实现在运行时选择适当的MessageBody{Writer,Reader},而不是返回对象

return Response.ok().entity(<the object>).build();
返回Response.ok().entity().build();

在这件事上浪费了太多时间。希望以后能对别人有所帮助=/

我建议返回一个
字符串
并手动解析对象,或者返回一个表示您想要/需要公开的数据的
映射
。如果我正在做这两件事中的任何一件,我可能会将Jersey踢到路边,自己写出JSONObject并在低级操作容器响应对象。不,那不是答案。我想要JAXB映射的对象。那么,欢迎来到JAXB的一个常见问题/限制。那么你是说:Jersey不仅不支持这种开箱即用的方法,而且整个JAXB规范使它绝对不可能实现?我觉得很难相信。。。每个JAXB容器中的每个服务是否只返回一个类类型?