У меня есть две сущности "компания" и "продукт" с двунаправленным отношением "один ко многим".Чтобы избавиться от зацикливания во время сериализации, я использую @JsonView.Потому что мне нужно отобразить эту ссылку как от компании, так и от продукта.
Но проблема в том, что у меня есть общие поля в абстрактных объектах, чтобы не дублировать код.Пример кода:
@RestController
@RequestMapping("/api/companies")
public class CompanyController {
@JsonView({CompanyViews.class})
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<Company> getAll() {
return service.getAll();
}
}
@RestController
@RequestMapping("/api/products")
public class ProductController {
@JsonView({ProductViews.class})
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody List<Product> getAll() {
return service.getAll();
}
}
@Entity
public class Company extends AbstractEntity {
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
@JsonView({CompanyViews.class})
private Set<Product> products;
}
@Entity
public class Product extends AbstractEntity {
@ManyToOne
@JsonView({ProductViews.class})
@JoinColumn(name = "company_id", nullable = false)
private Company company;
}
@MappedSuperclass
public abstract class AbstractEntity implements BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@Column(nullable = false, unique = true)
protected String name;
// setter getter
}
public interface BaseEntity {
Long getId();
void setId(Long id);
String getName();
void setName(String name);
}
А если вы не пометите общие поля аннотации - они не будут сериализованы, но мне нужно.
И я не знаю, как тогда пометить общие поля,Потому что, если у меня будет сотня сущностей, у меня будет слишком много отмеченных классов для общих полей.
Скажите мне лучшие решения или альтернативные решения.