Как стать автором
Обновить
12
0
Артём Бояршинов @boiarshinov

Software Developer

Отправить сообщение

Обратите внимание, что по первой ссылке приведен метод valueOf() с двумя аргументами, а не с одним. В статье же речь шла про valueOf() с одним аргументом. О существовании valueOf() с двумя аргументами было написано чуть выше процитированного отрывка.


По второй ссылке также приведен не тот метод, про который написано в статье - getEnumConstants() вместо values().

Подскажите, пожалуйста, зачем Microprofile написали свою собственную реализацию OpenApi, если есть уже готовая библиотека от мейнтейнеров OpenApi - SmartBear?

Ага, еще Джошуа Блох писал, что

... single-element enum type is often the best way to implement a singleton.

Правда я не уверен, что кто-либо хочет видеть в своих синглтоновых классах методы valueOf(), values(), compareTo() , ordinal() и т.д.
Ради интереса я даже пытался найти хотя бы один синглтон на основе enum в стандартной библиотеке Java, но не нашел.

Кстати, в Котлине не стали пользоваться рекомендацией Блоха и у них object разворачивается в обычный класс с одной внутренней статической константой. Сам класс от `java.lang.Enum` не наследуется

Пара мыслей про новый System.Logger:


  • появилась поддержка лямбда-выражений — это то, чего не хватало в SLF4J. Кажется, что связка System.Logger и log4j2 будет идеальной;
  • убрали лишние уровни логирования типа FINE, FINER, FINEST и оставили привычные 5 уровней (+2 системных);
  • но при этом поленились создавать методы debug(), info() и прочие, предлагая каждый раз указывать уровень логирования в аргументах метода;
  • в lombok до сих пор нет аннотации, которая будет генерировать инстанс такого логера.

В итоге переход с SLF4J будет слишком тяжелым: нужно будет руками создавать экземпляр логера в каждом классе и везде придется поменять вызовы логирующих методов. Если с первый недостаток можно было бы устранить, сделав PR в lombok, то для устранения второго придется писать тулзу (или искать существующую), которая пробежится по всем классам и переделает вызовы логирования в соответствии с новой парадигмой.
В общем, создать универсальное средство для логирования, которое стало бы общепринятым в Java-мире, так и не удалось. SLF4J и Logback мертвы, но все еще хорошо справляются со своей работой, а переход с SLF4J на System.Logger кажется слишком болезненным.

К сожалению, библиотека Spring Email (org.springframework.mail) предоставляет функционал только для отправки писем. Если требуется читать письма, то можно воспользоваться ванильной javax.mail со всеми ее недостатками.
Возможно есть какое-то API для чтения писем в Spring Integration, но мне пока не доводилось с ним работать.

Странно, что не упомянули аналог springdoc-openapi-uispringfox, т.к. у Springfox в 5 раз больше звездочек на гитхабе (тут следует заметить, что ни тот, ни другой проект не имеют отношения к фреймворку Spring и не мейнтейнятся Pivotal'ом).
Мы у себя в проекте пользуемся springdoc-openapi-ui, потому что так исторически сложилось.
Для того чтобы не перегружать контроллер описаниями мы сначала придумали собственные аннотации, описывающие стандартные виды ответа сервера: @BadRequestApiResponse, @UnauthorizedApiResponse. Эти аннотации включали в себя обычные аннотации из io.swagger. Вот пример такой аннотации:


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ApiResponse(
    responseCode = "400",
    description = "Incorrect input data",
    content = @Content(
        mediaType = MediaType.APPLICATION_JSON_VALUE,
        schema = @Schema(implementation = ErrorInfoResponse.class)
    )
)
public @interface BadRequestApiResponse {
}

В итоге в контроллере нужно было подробно описывать только положительный исход работы API, но и для этого мы потом тоже придумали аннотацию. Вот так стала выглядеть шапка метода контроллера (все названия и описания моделей изменены):


@GetMapping("/entities")
@SecureOperation(summary = "Поиск сущностей по фильтрам")
@OkApiResponse(description = "Отпагинированный список сущностей")
@BadRequestApiResponse
@UnauthorizedApiResponse
@InternalServerErrorApiResponse
SearchPage<EntityJsonPojo> findEntities(

Когда описание API стало занимать больше половины класса контроллера мы вынесли его в интерфейс.


Насчет того что модели становятся перегруженными, на мой взгляд, в этом нет ничего страшного — у них работа такая. В итоге на полями моделей висит три вида аннотаций: от com.fasterxml.jackson, от javax.validation и от io.swagger:


@Schema(description = "Мобильный телефон", example = "8005553535")
@NotNull
@JsonProperty(value = "phone")
@Pattern(regexp = "\\d{10}", message = "Телефон должен состоять из 10 символов (без 8)")
private String phoneNumber;
evgs89 писал о Краснодаре, а не Красноярске.
Стоит добавить еще подкаст The Art Of Programming, все-таки уже больше 10 лет выходит с завидной регулярностью (спасибо Голодному из Иркутска). Подкаст начинался, как посвященный Java, но на сегодняшний день там обсуждаются темы без привязки к определенной технологии / ЯП.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Зарегистрирован
Активность