我有两个简单的类:
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>
似乎 JAXB 注释没有参与解析为 JSON 的过程,尤其是:@XmlTransient & @XmlAccessorType(XmlAccessType.NONE) 被强制忽略。