加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

泛型 – JAX-RS对XML或JSON的响应不起作用

发布时间:2020-12-16 23:35:41 所属栏目:百科 来源:网络整理
导读:我有以下GenericRest类,我用它来扩展基于使用@XmlRootElement注释的Entity类的rest类. public class GenericRestT extends BaseEntity { @Inject @Service GenericServiceT service; public GenericServiceT getService() { return service; } @GET @Produce
我有以下GenericRest类,我用它来扩展基于使用@XmlRootElement注释的Entity类的rest类.

public class GenericRest<T extends BaseEntity> {

    @Inject @Service
    GenericService<T> service;

    public GenericService<T> getService() {
        return service;
    }

    @GET
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
    public Response getAll() {
        // This works for JSON but does not work for XML Requests.
        List<T> list = getService().findAll();
        // This just gives the attributes for the BaseEntity.
        //GenericEntity<List<T>> list = new GenericEntity<List<T>>(getService().findAll()) {};
        return Response.ok(list).build();
    }
}

APPLICATION_JSON在当前未注释的情况下工作正常,但APPLICATION_XML给出错误:

Could not find MessageBodyWriter for response object of type:
java.util.ArrayList of media type: application/xml

注释的情况适用于两种MediaTypes,但只返回BaseEntity的属性,而不是扩展类的添加属性.如何获取扩展类的属性并使两个MediaType都有效?

可以在此处找到完整的存储库(正在进行中):https://github.com/martijnburger/multitenant

===更新1 ===

我更改了实体上的@XmlSeeAlso注释.它是在特定实体上,但需要在BaseEntity上.此外,我使用了上面的GenericList实现.这给出了正确的XML响应.但是,它仍然只返回JSON repsonses中的BaseEntity属性.我有两个后续问题:

>如何返回JSON响应,包括请求的特定对象的属性?
>如果在添加或删除特定实体类时不必触及BaseEntity,我更喜欢它.因为@XmlSeeAlso注释每次添加新的Entity类时,我都需要更新注释.有没有其他方法可以实现这一点,我不需要触及BaseEntity?

可以在此处找到包含更改的存储库:https://github.com/martijnburger/multitenant/tree/so_36291250

===更新2 ===

我很希望杰克逊的@JsonSubTypes注释可以解决我的问题1.然而,事实并非如此.我使用Jackson注释更新了存储库,但我看不到结果的任何变化.

===更新3 ===

请忽略我的更新2.当使用Jackson 2而不是Jackson 1时,它完全有效.初学者错了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读