Как применить @JsonView к общим полям - PullRequest
0 голосов
/ 24 января 2019

У меня есть две сущности "компания" и "продукт" с двунаправленным отношением "один ко многим".Чтобы избавиться от зацикливания во время сериализации, я использую @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);
}

А если вы не пометите общие поля аннотации - они не будут сериализованы, но мне нужно.

И я не знаю, как тогда пометить общие поля,Потому что, если у меня будет сотня сущностей, у меня будет слишком много отмеченных классов для общих полей.

Скажите мне лучшие решения или альтернативные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...