-1

我正在尝试将Long我的资源中的列表作为发布数据传递,并且使用类型为application/xml. 我还传递了两个路径参数。它给了我例外“不支持媒体类型”。

请帮我解决这个问题。这是代码,我有异常..

@POST
    @Path("/temp/{abc}")
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public List<Long> createUser2(List<User> users,@PathParam("abc") String abc) {
//.................//
        List<Long> listLong=new ArrayList<Long>();
        listLong.add(1L);
        listLong.add(2L);
        System.out.println("temp called");
        return listLong;
    }




> org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:
> MessageBodyWriter not found for media type=application/xml
4

1 回答 1

5

问题是没有转换代码知道如何自动将 aLong或 a更改List<Long>为 XML。至少,关于包含元素的名称必须存在的信息,并且 JAXB(默认支持的机制)仅在类级别应用这种东西。

解决方法是使用合适的 JAXB 注释创建一个包装类并将其返回。您可能需要调整类以获得您想要的序列化,但这并不难。

@XmlRootElement(name = "userinfo")
public class UserInfo {
    @XmlElement
    public List<Long> values;
    // JAXB really requires a no-argument constructor...
    public UserInfo() {}
    // Convenience constructor to make the code cleaner...
    public UserInfo(List<Long> theList) {
        values = theList;
    }
}
@POST
@Path("/temp/{abc}")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
// NOTE THE CHANGE OF RESULT TYPE
public UserInfo createUser2(List<User> users,@PathParam("abc") String abc) {
    //.................//
    List<Long> listLong=new ArrayList<Long>();
    listLong.add(1L);
    listLong.add(2L);
    System.out.println("temp called");
    return new UserInfo(listLong); // <<<< THIS LINE CHANGED TOO
}
于 2013-08-06T09:06:31.913 回答