Size: a a a

Spring Framework and more

2020 January 08

S

Seriously in Spring Framework and more
Может кто-нибудь подсказать как это реализовать? Начал тренироваться со спрингом и взял это как второе задание, пока что научился просто данные добавлять в бд, а теперь хотелось бы картинки, но не совсем понимаю с какой стороны подойти. Можете подсказать по задаче?

Реализовать простое REST API с одним единственным методом, который
загружает и обрабатывает изображения.

Требования:
- Возможность загружать изображения по заданному URL (изображение
размещено где-то в интернете).
- Возможность загружать несколько изображений в одном запросе.
источник

S

Seriously in Spring Framework and more
Правильно понимаю, что мы должны каким-то образом будем шифровать картинки для передачи, чтобы потом их принять?
источник

VM

Vladislav Maltsev in Spring Framework and more
Не правильно
источник

VM

Vladislav Maltsev in Spring Framework and more
Либо через base64, либо через формдату
источник

VM

Vladislav Maltsev in Spring Framework and more
Других вариантов я не знаю
источник

AI

Alexander Ivanov in Spring Framework and more
Andrei
Всех с праздниками!) Spring по умолчанию умеет инжектить в листы бины с одинаковым интерфейсом. Например:

@RequiredArgsConstructor
public class Service {
   private final List<Handler> handlers;
}

Я хочу свой бин-лист, чтобы соблюсти в нем порядок. Например:
@Bean
public List<Handler> handlers() {
   return List.of(
           Handler1.class,
 ...            
 HandlerN.class).stream().map(h -> context.getBean(h)).collect(Collectors.toList());
}

Так вот он даже имея объявленный бин такой с листом и таким же имененм, все равно инжектит свой лист с бинами, в том порядке, в каком они проинициализированы. Может есть способ отключить создание листов бинов самостоятельное? Или другой бест практис, который тут может подойти. без оборачивания листа в еще один бин жалательно)
а в зачем это? Зачем тебе лист с порядком бинов?
источник

S

Seriously in Spring Framework and more
Vladislav Maltsev
Либо через base64, либо через формдату
Мы должны url адрес принимать и расшифровывать с картинкой
источник

VM

Vladislav Maltsev in Spring Framework and more
Seriously
Мы должны url адрес принимать и расшифровывать с картинкой
Берешь вэбклиент или ресттемплейт какой-нибудь и считываешь байтики, потом их сохраняешь
источник

VM

Vladislav Maltsev in Spring Framework and more
Ещё желательно вместе с этим массивом байтиков хранить контент тайп из хэдэров можно достать
источник

A

Andrei in Spring Framework and more
Alexander Ivanov
а в зачем это? Зачем тебе лист с порядком бинов?
ну по названию handler там думал понятно) рест-запрос проходит через несколько перехватчиков. первый например проверяет права доступа, и так далее...
источник

A

Andrei in Spring Framework and more
типа такого patchHandlers.forEach(handler -> handler.preHandle(...));
источник

AI

Alexander Ivanov in Spring Framework and more
Andrei
ну по названию handler там думал понятно) рест-запрос проходит через несколько перехватчиков. первый например проверяет права доступа, и так далее...
не пробовал использовать @DependsOn ? ты cможешь постороить так цепочку инита бинов. Просто я все равно не особо понимаю почему именно лист бинов. Даже если у тебя будет 1 интерфейс, гибкости не добьешься, при каждой новой реализации нужно переписывать ордеринг, допустим, если кто-то захочет добавить в середину какую-то реализацию. Тем более тебе для рест-запросов. Ты можешь это решить с помощью фильтров и абстракции. Задать ордеринг для обработки запроса а далее на каждый акшен фильтр с интефейсом. В дальнейшем сможешь легко расширять.
источник

A

Andrei in Spring Framework and more
Alexander Ivanov
не пробовал использовать @DependsOn ? ты cможешь постороить так цепочку инита бинов. Просто я все равно не особо понимаю почему именно лист бинов. Даже если у тебя будет 1 интерфейс, гибкости не добьешься, при каждой новой реализации нужно переписывать ордеринг, допустим, если кто-то захочет добавить в середину какую-то реализацию. Тем более тебе для рест-запросов. Ты можешь это решить с помощью фильтров и абстракции. Задать ордеринг для обработки запроса а далее на каждый акшен фильтр с интефейсом. В дальнейшем сможешь легко расширять.
выше написано, что бин, бегающий по списку находится в в отдельном модуле (и большинство бинов из списка там же), а инициализация порядка элементов списка и добавление как раз кастомных бинов в этот список, на конкретном приложении, использующем этот модуль. поэтому нельзя выстроить Ordered или DependsOn (тут вообще не будет зависимости в обратную сторону в некоторых кейсах, чтобы указать класс) когда это все раскидано по разным модулям и красивое решение на мой взгляд в каждом приложении отдельным конфигом инициализировать этот список
источник

AT

Aurdo The Shalomander in Spring Framework and more
Andrei
выше написано, что бин, бегающий по списку находится в в отдельном модуле (и большинство бинов из списка там же), а инициализация порядка элементов списка и добавление как раз кастомных бинов в этот список, на конкретном приложении, использующем этот модуль. поэтому нельзя выстроить Ordered или DependsOn (тут вообще не будет зависимости в обратную сторону в некоторых кейсах, чтобы указать класс) когда это все раскидано по разным модулям и красивое решение на мой взгляд в каждом приложении отдельным конфигом инициализировать этот список
хм, отдаленно напомнило чейн фильтров SpringSecurity. Мб стоит глянуть как там сделано
источник

A

Andrei in Spring Framework and more
нагуглил, что там отдельный бин-менеджер, который хранит порядок :)

@Autowired
   public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
       auth.authenticationProvider(authenticationProvider);
       auth.authenticationProvider(authenticationProviderDB);

   }


https://stackoverflow.com/questions/35363924/java-spring-security-config-multiple-authentication-providers
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Еще можно глянуть org.springframework.boot.autoconfigure.http.HttpMessageConverters

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

Преимущество перед голым листом - более строгий контракт, есть куда поместить жавадоки, можно добавить всяких полезных хелпер-методов в класс (вроде addHandlerBefore(Class<Handler> anotherExistingHandler) и т.п.
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Ну и отпадет необходимость в квалифаерах) хотя это не самое серьезное преимущество, конечно
источник

A

Andrei in Spring Framework and more
спасибо)
источник

IS

Ihar Sadounikau in Spring Framework and more
Это не про спринг)
источник

R

Responsibility in Spring Framework and more
Еще один
источник