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

前端之家收集整理的这篇文章主要介绍了泛型 – JAX-RS对XML或JSON的响应不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下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时,它完全有效.初学者错了.

猜你在找的XML相关文章