在没有根元素的情况下解组JSON的错误

时间:2016-10-06 14:02:55

标签: json jaxb

我有一个RESTful Web服务,我正在POST {PUTing Entry个对象。但是,它正在寻找JSON和XML的根元素,例如:

{ "Entry": {
   "name": "John Doe",
   "phone_number": "555-1234",
    .
    . 
    .
}

但是,根据我看到的使用ContextResolver的示例,在阅读或返回TelephoneBookEntry个对象时,不应该需要Entry根元素。

@Provider
@Produces({ APPLICATION.XML, APPLICATION.JSON })
public class JaxBEntryContextResolver implements ContextResovler<JAXBCONTEXT> {
    private static final Class<?>[] classes = {Entry.class};
    private static JAXBContext context;

    static {
        try {
            context = JAXBContext.newInstance(classes);
        } catch (JAXBException e) {
        }
    }

    public JaxBEntryContextResolver() {
    }

    @Override
    public JAXBContext getContext(Class<?> type) {
        JAXBContext ret = null;
        if(Arrays.asList(classes).contains(type)) {
           ret = context;
        }
        return ret;
    }
}         

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Entry {
    @XmlElement
    private String name;
    @XmlElement
    private String phone_number;
    .
    .
    .
}

我认为我的ContextResolver课程非常标准,所以我不确定会出现什么问题。我希望能够POST JSON或XMl,而无需root元素。

更新:我还尝试过不使用`XmlRootElement,但这没有做任何事情。另外,我使用的是Jersey 2.17,所以我不确定为什么在默认情况下不会发生解包。

1 个答案:

答案 0 :(得分:0)

尝试将根元素的名称添加到XmlRootElement注释

@XmlRootElement(name = "TelephoneBookEntry")