2015-03-02 4 views
2

Я работаю над приложением Spring boot (MVC, JPA), и он должен возвращать разные атрибуты для разных запросов. Я нашел аннотацию @JsonView и, похоже, работает. Но нужно ли аннотировать каждый атрибут базовым представлением?JsonView - define Default View

Пример:

entity1

@Entity 
    public class Entity1 implements Serializable { 
     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private Long id; 

     @JsonView(JsonViews.ExtendedView.class) 
     private String name; 

     @OneToMany(cascade = CascadeType.ALL, mappedBy = "entity1", fetch = FetchType.EAGER) 
     List<Entity2> entities2; 

     @JsonView(JsonView.ExtendedView.class) 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "entity1", fetch = FetchType.LAZY) 
     List<Entity3> entities3; 

    } 

entity2

@Entity 
public class Entity2 implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String name; 
} 

Entity3

@Entity 
public class Entity3 implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String name; 
} 

Просмотров

public class JsonViews { 
    public static class BasicView { } 
    public static class ExtendedView extends BasicView { } 
} 

Контроллер

@RequestMapping(method = RequestMethod.GET) 
    @JsonView(JsonViews.BasicView.class) 
    public @ResponseBody List<Entity1> index() { 

    return repositoryEntity1.findAll(); 

    } 

Это обрезается пример, но я думаю, что это относится к проблеме. Я ожидаю, что контроллер вернет идентификаторы и список объектов Entity2. Но он возвращает пустой объект с «Нет свойств». Если я аннотирую каждый атрибут каждого класса, участвующего в этом запросе, он, похоже, работает, но действительно ли это нужно или лучшее решение? Есть ли способ определить «DefaultView»?

благодаря

Edit: Если я аннотировать JpaRepository он возвращает весь объект, включая список с объектами Entity3.

+0

Да, вам нужно добавить, что для каждой переменной – LynAs

+0

Пожалуйста, проверьте ваше сообщение. – Byeon0gam

ответ

2

Нет, вам не нужно определять представления для всех свойств. Вставьте

spring.jackson.mapper.default-view-inclusion=true

в вашем application.properties. Это приведет к тому, что свойства без аннотации @JsonView будут включены в ответ, и будут аннулированы только аннотированные свойства.

В вашем контроллере будут возвращены свойства без вида или с аннотированным BasicView.