Стажировка Topjava
Один из вариантов сокрытия полей в примерах Swagger - сделать специальный TO класс. Но можно сделать проще через специальные аннотации: Hide a Request Field in Swagger API
- Скрываем необязательные поле
idпри POST и PUT запросах через@ApiModelProperty(hidden = true)в примерах запроса Swagger. При этом передавать поле в запросе можно. Meal.userотсутствует в REST API, можно игнорировать:@JsonIgnoreUser.mealsможно было сделатьJsonProperty.Access.READ_ONLY, но при этом не пройдут тестыgetWithMeals(maels не будет сериализоваться из ответа сервера для сравнения). Скрыл также через@ApiModelProperty(hidden = true)- Также можно было скрыть нулевое поле
User.mealsпри выводе через@JsonInclude(JsonInclude.Include.NON_EMPTY). Но при этом поле исчезнет при запросеgetWithMealsпользователя с пустым списком еды (например для Guest). Все зависит от бизнес-требований приложения (например насколько API публично и должно быть красивым). Можете попробовать самостоятельно скрыть это поле из вывода для запросов без еды черезView(или отдельный TO).
За основу взят финальный код проекта BootJava с миграцией на Spring Boot 3.2, 8-й урок
Вычекайте в отдельную папку (как отдельный проект) ветку spring_boot нашего проекта (так удобнее, не придется постоянно переключаться между ветками):
git clone --branch spring_boot --single-branch https://github.com/JavaWebinar/topjava.git topjava_boot
Если будете его менять, настройте git remote
Если захотите сами накатить патчи, сделайте ветку
spring_bootот первогоinitи в корне создайте каталогsrc\test
Оставил как в TopJava название приложения Calories Management и имя базы topjava
Добавил из TopJava:
- Еду, калории
- Таблицы назвал в единственном числе:
user_role, meal(кромеusers, user зарезервированное слово) - Общие вещи (пусть небольшие) вынес в сервис :
MealService - Проверку принадлежности еды делаю в
MealRepository.getBelonged - Вместо своих конверторов использую
@DateTimeFormat - Обратите внимание на
UserRepository.getWithMeals- он не работает с@EntityGraph. Зато работает с обычнымJOIN FETCHиDISTINCTбольше не нужен: - Мигрировал все тесты контроллеров. В выпускном проекте столько тестов необязательно! Достаточно нескольких, на основные юзкейсы.
- Кэширование в выпускном желательно. 7 раз подумайте, что будете кэшировать! Максимально просто, самые частые запросы, которые редко изменяются.
- Добавьте в свой выпускной OpenApi/Swagger - это будет большим плюсом и избавит от необходимости писать документацию.
