1

私は2つの単純なクラスを持っています:

import javax.xml.bind.annotation.*;

@XmlRootElement(name="address")
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {

    @XmlElement(required=true) 
    protected int number;

    @XmlElement(required=true)  
    protected String street;

    @XmlTransient
    protected String city;

    public Address() { }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    @XmlTransient
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}

と:

import javax.xml.bind.annotation.*;

@XmlRootElement(name="customer")
@XmlAccessorType(XmlAccessType.NONE)
public class Customer {

    @XmlAttribute(required=true) 
    protected int id;

    @XmlElement(required=true) 
    protected String firstname;

    @XmlElement(required=true) 
    protected String lastname;

    @XmlTransient
    protected Address address;

    public Customer() { }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastName) {
        this.lastname = lastName;
    }

    @XmlTransient
    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}

リソースメソッド:

@GET
@Path("{id}")
@Produces({"application/json"})
public Customer getCustomer(@PathParam("id") String id) {
    Customer customer = null;
    try {
        customer = JpaEmu.findById(id);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return customer;   // null = 204
}

JSON オブジェクトにアドレスを含めないようにしたいのですが、GET リクエストは以下を返します。

{"id":1,"firstname":"Duke2","lastname":"NukEm","address":{"number":23,"street":"Hollywood Holocaust","city":"L.A."}}

以下で実行: Jboss7、私の依存関係は次のとおりです。

jboss-javaee-6.0 3.0.2.Final

web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

  <servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

特に、@XmlTransient & @XmlAccessorType(XmlAccessType.NONE) は完全に無視されます。

4

2 に答える 2

3

これは少し古い投稿であることは知っていますが、最近同じ問題が発生したため、この投稿を更新するために戻ってきました.

を使用してシリアライズすると、 のようJAXBな注釈XmlAccessorTypeは無視されるようです。JacksonJerseyJersey

この投稿は私を正しい方向に向けました。あなたも使うべきだと思われます

@JsonAutoDetect( JsonMethod.NONE )JAXBの代わりに(または任意の時点でtrue を使用する場合はそれと組み合わせて)@XmlAccessorType( XmlAccessType.NONE )

この方法を使用すると、すぐに結果が得られました。

@JsonPropertyまた、プロパティの代わりに注釈を使用することも@XmlElementできます (true JAXBon を使用して任意の時点でオブジェクトをシリアル化する場合を除きます)。

于 2015-03-04T15:31:17.407 に答える