java - 如何将大写字母的 Sharepoint JSON 对象映射到 MOXy 类?

标签 java jaxb moxy

我使用 Apache Wink 客户端和 MOXy 对 Microsoft Sharepoint 进行 RESTful Web 服务调用。

我即将完成 JSON/POJO 映射,但我仍停留在 3 个剩余元素上:CreatedBy、ModifiedBy 和 Attachments。当我在调试器中检查 Results 对象时,所有 3 个对象的值均为 null。

这是我尝试映射的 JSON 响应:

{
"d": {
    "results": [
        {
            "__metadata": {
                "uri": "https://worksites.connect.somecompany.com/sites/UniversityRelations/_vti_bin/listdata.svc/UserInformationList(1)", 
                "etag": "W/\"63\"", 
                "type": "Microsoft.SharePoint.DataService.UserInformationListItem"
            }, 
            "ContentTypeID": "0x010A005977DE477030BD4EADA71E1A1B9F4069", 
            "Name": "Some name", 
            "Account": "Some account", 
            "WorkEMail": null, 
            "MobilePhone": null, 
            "AboutMe": null, 
            "SIPAddress": null, 
            "IsSiteAdmin": true, 
            "Deleted": false, 
            "Picture": null, 
            "Department": null, 
            "Title": null, 
            "FirstName": "Some first name", 
            "LastName": "Some last name", 
            "WorkPhone": null, 
            "UserName": "Some username", 
            "WebSite": null, 
            "AskMeAbout": null, 
            "Office": null, 
            "Id": 1, 
            "ContentType": "Person", 
            "Modified": "\/Date(1384765618000)\/", 
            "Created": "\/Date(1372051813000)\/", 
            "CreatedBy": {
                "__deferred": {
                    "uri": "https://worksites.connect.somecompany.com/sites/UniversityRelations/_vti_bin/listdata.svc/UserInformationList(1)/CreatedBy"
                }
            }, 
            "CreatedById": 1, 
            "ModifiedBy": {
                "__deferred": {
                    "uri": "https://worksites.connect.somecompany.com/sites/UniversityRelations/_vti_bin/listdata.svc/UserInformationList(1)/ModifiedBy"
                }
            }, 
            "ModifiedById": 1073741823, 
            "Owshiddenversion": 63, 
            "Version": "1.0", 
            "Attachments": {
                "__deferred": {
                    "uri": "https://worksites.connect.somecompany.com/sites/UniversityRelations/_vti_bin/listdata.svc/UserInformationList(1)/Attachments"
                }
            }, 
            "Path": "/sites/UniversityRelations/_catalogs/users"
        }]
    }
}

这是我的结果类:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Chris Harris
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)  <!-- Allows the __Metadata class to be mapped -->
public class Results {
    private __Metadata __metadata;
    @XmlAttribute(name="ContentTypeID")
    private String contentTypeID;
    @XmlAttribute(name="Name")
    private String name;
    @XmlAttribute(name="Account")
    private String account;
    @XmlAttribute(name="WorkEMail")
    private String workEMail;
    @XmlAttribute(name="MobilePhone")
    private String mobilePhone;
    @XmlAttribute(name="AboutMe")
    private String aboutMe;
    @XmlAttribute(name="SIPAddress")
    private String sIPAddress;
    @XmlAttribute(name="IsSiteAdmin")
    private String isSiteAdmin;
    @XmlAttribute(name="Deleted")
    private String deleted;
    @XmlAttribute(name="Picture")
    private String picture;
    @XmlAttribute(name="Department")
    private String department;
    @XmlAttribute(name="Title")
    private String title;
    @XmlAttribute(name="FirstName")
    private String firstName;
    @XmlAttribute(name="LastName")
    private String lastName;
    @XmlAttribute(name="WorkPhone")
    private String workPhone;
    @XmlAttribute(name="UserName")
    private String userName;
    @XmlAttribute(name="WebSite")
    private String webSite;
    @XmlAttribute(name="AskMeAbout")
    private String askMeAbout;
    @XmlAttribute(name="Office")
    private String office;
    @XmlAttribute(name="Id")
    private String id;
    @XmlAttribute(name="ContentType")
    private String contentType;
    @XmlAttribute(name="Modified")
    private String modified;
    @XmlAttribute(name="Created")
    private String created;
    @XmlAttribute(name="CreatedBy")
    private CreatedBy createdBy;
    @XmlAttribute(name="CreatedById")
    private String createdById;
    @XmlAttribute(name="ModifiedBy")
    private ModifiedBy modifiedBy;
    @XmlAttribute(name="ModifiedById")
    private String modifiedById;
    @XmlAttribute(name="Owshiddenversion")
    private String owshiddenversion;
    @XmlAttribute(name="Version")
    private String version;
    @XmlAttribute(name="Attachments")
    private Attachments attachments;
    @XmlAttribute(name="Path")
    private String path;
}

由于 CreatedBy、ModifiedBy 和 Attachments 类当前的配置方式相同,因此这里只是我的 CreatedBy 类:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Chris Harris
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CreatedBy {
    private __Deferred __deferred;

    public __Deferred getDeferred() {
        return __deferred;
    }

    public void setDeferred(__Deferred __deferred) {
        this.__deferred = __deferred;
    }
}

如何映射 CreatedBy、ModifiedBy 和附件?

最佳答案

目前,Results 类上的所有内容均已使用 @XmlAttribute 进行了映射。 @XmlAttribute 只能用于简单属性(即 Stringintbyte[])或具有使用 @XmlValue 映射的一个字段/属性的域对象。您应该将映射更改为:

@XmlElement(name="ModifiedBy")
private ModifiedBy modifiedBy;

此外,除非您也将此对象模型编码为 XML,否则我会将所有 @XmlAttribute 映射更改为 @XmlElement

关于java - 如何将大写字母的 Sharepoint JSON 对象映射到 MOXy 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085413/

相关文章:

java - 自定义异常不断给我 "Exception: Unknown exception"

xsd - 使用 trang 将 RELAX NG 转换为 XSD,同时保留外部命名空间元素(用于 JAXB)

java - moxy jaxb : mapping member attribute

java - 如何以正确的方式过滤 ArrayList 的内容?

java - 错误 : Could not find com. google.gms :google-services:1. 0. 在 android studio 的 build.gradle 中添加 google 服务插件时

java - 来自 java 包的 jaxb.properties 文件未包含在 Maven 构建的 .war 中

java - jax-rs Jersey @Post 响应实体为空

java - 使用 MOxy 进行 xml 绑定(bind)返回 null 未编码对象

java - 如何使用 JPA 从 MySQL 检索 DateTime,无需毫秒

java - 谁能给我一份无效的 XML 字符列表