我正在使用Spring 2.1构建REST API,并且正在获取重复的数据以咨询ManyToOne关系。
本地化
:@Entity
@Table(name = "localidad")
public class Localidad implements Serializable {
private static final long serialVersionUID = -7258462202419598287L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idLocalidad;
private String nombreLocalidad;
private BigDecimal precioEnvio;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "provinciaIdProvincia")
private Provincia provincia;
public Localidad() {}
public Localidad(String nombreLocalidad, BigDecimal precioEnvio) {
this.nombreLocalidad = nombreLocalidad;
this.precioEnvio = precioEnvio;
}
...
省:
@Entity
@Table(name = "provincia")
public class Provincia implements Serializable {
private static final long serialVersionUID = 3324427184301992595L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idProvincia;
private String nombreProvincia;
@OneToMany(mappedBy= "provincia", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Localidad> localidades = new HashSet<Localidad>();
public Provincia() {}
public Provincia(String nombreProvincia) {
this.nombreProvincia = nombreProvincia;
}
...
我通过实现CrudRepository和Service @Autowired访问信息
重复的数据HTTP GET请求:
谢谢
答案 0 :(得分:0)
该问题是由Jackson在provincia
和localidades
字段上进行循环序列化引起的。这可以通过使用@JsonIgnoreProperties
注释来解决。因此,请在Localidad
类或实体中添加注释,如下所示:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "provinciaIdProvincia")
@JsonIgnoreProperties("localidades")
private Provincia provincia;
在Provincia
类中修改Set<Localidad>
(顺便说一句,您可以只使用List<Localidad>
),如下所示:
@OneToMany(mappedBy= "provincia", cascade = CascadeType.ALL, fetch =
FetchType.LAZY)
@JsonIgnoreProperties("provincia")
private Set<Localidad> localidades = new HashSet<Localidad>();
通过此更改,您的Rest API现在应该不显示重复项。您必须忽略定义两个类或实体之间关联的字段。如果您使用@JsonProperty
来定义字段名称,请使用@JsonProperty
定义中的@JsonIgnoreProperties
中使用的名称。