【问题标题】:Convert Java nested class to JSON using JAX-RS使用 JAX-RS 将 Java 嵌套类转换为 JSON
【发布时间】:2015-08-03 21:05:03
【问题描述】:

我基本上想通过我的 JAVA REST API 将 Customer 类的对象作为 JSON 发送到 android。

我的Customer 类如下所示:

public class Customer {
    private long customerId;
    private String firstName;
    private String middleName;
    private String lastName;
    private String gender;
    private long accountId;

    class Account {
        private long accountId;
        private int balance;
    }
}

我期望的 JSON 应该是这样的:

{
 "customerId": "something",
 "firstName": "something",
 "middleName": "something",
 "gender": "M or F",
 "accountId": "something",
 "Account": {
  "accountId": "something",
  "balance": "something",
 } 
}

额外信息:

我使用此依赖项转换为 JSON。

 <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-moxy</artifactId>
    </dependency>

我怎样才能使这个类的一个对象,使它的 JAX-RS 转换的 JSON 看起来像这样?

【问题讨论】:

    标签: java android json jersey jax-rs


    【解决方案1】:

    外部类可以有多个内部类实例。如果你想将它编组为 JSON,你应该告诉,使用什么实例。为此,我想将Account account 字段添加到外部类中。然后,您需要为私有字段和XmlElement 注释添加getter/setter。最后,它看起来像这样:

    import javax.xml.bind.annotation.XmlElement;
    
    public class Customer {
        private long customerId;
        private String firstName;
        private String middleName;
        private String lastName;
        private String gender;
        private long accountId;
        private Account account;
    
        class Account {
            private long accountId;
            private int balance;
    
            @XmlElement(name = "accountId")
            public long getAccountId() {
                return accountId;
            }
            public void setAccountId(long accountId) {
                this.accountId = accountId;
            }
            @XmlElement(name = "balance")
            public int getBalance() {
                return balance;
            }
            public void setBalance(int balance) {
                this.balance = balance;
            }
        }
    
        @XmlElement(name = "customerId")
        public long getCustomerId() {
            return customerId;
        }
        public void setCustomerId(long customerId) {
            this.customerId = customerId;
        }
        @XmlElement(name = "firstName")
        public String getFirstName() {
            return firstName;
        }
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
        @XmlElement(name = "middleName")
        public String getMiddleName() {
            return middleName;
        }
        public void setMiddleName(String middleName) {
            this.middleName = middleName;
        }
        @XmlElement(name = "lastName")
        public String getLastName() {
            return lastName;
        }
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
        @XmlElement(name = "gender")
        public String getGender() {
            return gender;
        }
        public void setGender(String gender) {
            this.gender = gender;
        }
        @XmlElement(name = "accountId")
        public long getAccountId() {
            return accountId;
        }
        public void setAccountId(long accountId) {
            this.accountId = accountId;
        }
        @XmlElement(name = "account")
        public Account getAccount() {
            return account;
        }
        public void setAccount(Account account) {
            this.account = account;
        }
    }
    

    现在,您可以像这样在 Jersey 客户端中使用此类的实例:

    Entity e = Entity.entity(customer, "application/json");
    Response r = invocationBuilder.method("POST", e);
    

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 1970-01-01
      • 2011-02-11
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2016-09-14
      相关资源
      最近更新 更多