Иметь один репозиторий Rest json со всем и один с исключенными полями - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть две сущности: Книга и Категория и хранилище для обеих.В контроллере я правильно настроил методы следующим образом:

@RequestMapping(value="/books", method = RequestMethod.GET)
@CrossOrigin
public @ResponseBody List<Book> bookListRest() {    
    return (List<Book>) bookRepository.findAll();
}     

Это, очевидно, показывает все книги и все поля в сущности, которые не являются @ JsonIgnore'd.Проблема в том, что мне нужно иметь:

  • Одна страница с данными Книги (имя книги, имя автора, isbn ..) без категории
  • Одна страница с данными категории (Название категории) без книг
  • Одна страница со всем (данные книг вместе с категориями, к которым они относятся)

Как этого достичь?Мне как-то нужно каким-то образом игнорировать @jsonignore в некоторых случаях.Должен ли я создать новую сущность с расширением скажем «Вопрос», а также создать хранилище для этого?Конечно, это не может быть правильным способом сделать это.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Как Халид Ахмед Саид, вы можете использовать costum dtos или добавить фильтры, чтобы игнорировать определенные поля в Джексоне.Во-первых, нам нужно определить фильтр для объекта Java:

@JsonFilter("myFilterBook")
public class Book{
    ...
}

@JsonFilter("myFilterCategory")
public class Category{
    ...
}

Перед тем, как вы вернете свой ResponseBody, вы пытаетесь использовать ObjectMapper (Джексон):

Случай одной страницы с данными Книги(имя книги, имя автора, isbn ..) без категории:

ObjectMapper mapper = new ObjectMapper();
        SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter
        .serializeAllExcept("category");
        FilterProvider filters = new SimpleFilterProvider()
        .addFilter("myFilterBook", theFilter);
    String dtoAsString = mapper.writer(filters).writeValueAsString(book);

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

И для болееПодробности игнорирования поля при сортировке с Джексоном вы можете проверить здесь

0 голосов
/ 27 ноября 2018

Как насчет использования DTOs data transfer objects

, вы можете создать несколько DTOs, чтобы использовать их в ответе вашего API

DTO, равного pojoclass, который настраивает возвращаемые данные из вашего entity

 public class BookWithoutCategoryDTO {
   private String name;
   private String authorName;
   .....
   /// and make setters and getters for them


 }

 public class BookWithCategoryDTO {
   private String name;
   private String authorName;
   private String category;
   .....
   /// and make setters and getters for them


 }

и создает ваш собственный преобразователь для преобразования из Book в BookDTO

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