Статьи

JAXB и несопоставленные свойства

JAXB (JSR-222) является конфигурацией по исключению, что означает, что к объектам домена применяется сопоставление по умолчанию. Это означает, что иногда вам нужно явно исключить поле / свойство. В этом посте я расскажу, как это можно сделать с помощью @XmlTransient или @XmlAccessorType (XmlAccessType.NONE) и когда каждый параметр подходит.

@XmlTransient

Когда вы помечаете поле / свойство с помощью @XmlTransient, вы явно указываете своей реализации JAXB обрабатывать его как несопоставленное свойство. Это полезно, когда менее половины полей / свойств не сопоставлены.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
package blog.unmapped;
  
import java.util.List;
import javax.xml.bind.annotation.*;
  
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
  
    @XmlTransient
    private int id;
  
    private String firstName;
  
    private String lastName;
  
    private Address billingAddress;
  
    private Address shippingAddress;
  
    private List<PhoneNumber> phoneNumbers;
  
}

Если более половины полей / свойств не сопоставлены, то мы прекращаем получать преимущество конфигурации за исключением, поскольку нам нужно проделать больше работы по исключению свойств с @XmlTransient, чем нужно было бы сделать для сопоставления сопоставленных свойств. Далее я продемонстрирую, как мы можем использовать @XmlAccessorType (XmlAccessType.NONE) для этого варианта использования.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package blog.unmapped;
  
import java.util.List;
import javax.xml.bind.annotation.*;
  
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
  
    @XmlTransient
    private int id;
  
    private String firstName;
  
    private String lastName;
  
    @XmlTransient
    private Address billingAddress;
  
    @XmlTransient
    private Address shippingAddress;
  
    @XmlTransient
    private List<PhoneNumber> phoneNumbers;
  
}

@XmlAccessorType (XmlAccessType.NONE)

Установив @XmlAccessorType (XmlAccessType.NONE), мы отключаем конфигурацию в порядке исключения. Теперь будут отображаться только явно сопоставленные свойства. Это полезно, когда отображается менее половины полей / свойств объекта домена.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package blog.unmapped;
  
import java.util.List;
import javax.xml.bind.annotation.*;
  
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
  
    @XmlTransient
    private int id;
  
    private String firstName;
  
    private String lastName;
  
    @XmlTransient
    private Address billingAddress;
  
    @XmlTransient
    private Address shippingAddress;
  
    @XmlTransient
    private List<PhoneNumber> phoneNumbers;
  
}

Дальнейшее чтение

Если вам понравился этот пост, то вам также нравится:

Ссылка: JAXB и Unmapped Properties от нашего партнера JCG Блеза Дафана в блоге Java XML & JSON Binding .