Ответы пользователя по тегу Spring
  • Как сгенерировать interface для @RestController по OpenAPI?

    zolt85
    @zolt85
    Программист
    Вам скорее всего сюда: https://github.com/OpenAPITools/openapi-generator
    Ответ написан
    Комментировать
  • Почему сборка gradle проекта длится очень долго?

    zolt85
    @zolt85
    Программист
    В случае bootRun в консоли IDEA (да и в любой другой консоли) так и будет крутиться bootRun на 80% (условно). Вы же запускаете приложение этой командой, вот оно и запускается, и работает, до тех пор пока Вы сами его не остановите, либо пока в программе не произойдет критической ошибки, при которой произойдет завершение программы. Как правило для сборки (именно сборки) приложения SpringBoot используют таски bootJar/bootWar. Уверяю Вас, они конечны, и работают достаточно шустро.
    Ответ написан
    2 комментария
  • Как развренуть Модульный проект Spring & Gradle?

    zolt85
    @zolt85
    Программист
    В корне Вы описываете зависимости и таски для всех модулей, в модулях только то, что нужно внутри этого модуля. Конкретный build.gradle файл привести сложно, ибо специфика проектов у всех разная. Про многомодульные приложения достаточно подробно написано в документации Gradle
    Ответ написан
    Комментировать
  • Где можно найти туториалы Spring c применением электронной цифровой подписи?

    zolt85
    @zolt85
    Программист
    О, брат. ЭЦП штука такая, что простых примеров тут нет. У тебя WEB приложение? Если так, то тебе копать в сторону CryptoPro Browser Plugin. Ни одна другая дрянь не работает. От сервера, по-сути, ничего не требуется, только похранить хэш подписи. Все остальные манипуляции - подпись, валидация подписи, происходят на клиенте (в браузере пользователя). Если же ты хочешь подписывать документы прямо на сервере, то тебе сначала в ФСБ, потом ставить за over9000 нефти серверный крипто про и просто юзать его API.

    Сам участвовал в прикручивании ЭЦП к системе документооборота, в принципе - ничего сложного. Если не делать подпись на сервере.

    Такие дела.
    Ответ написан
    Комментировать
  • Как передать параметр из properties в Spring Boot в js файл?

    zolt85
    @zolt85
    Программист
    Как самый простой вариант, Вы можете добавить простой контроллер на стороне сервера, который будет отдавать вам либо весь конфиг в JSON формате, либо конкретное значение из него по имени. Я не силен в написании плагинов к jQuery, но думаю можно это обыграть именно через плагин.
    Ответ написан
  • Какое название пакета для Entity классов правильнее?

    zolt85
    @zolt85
    Программист
    Правильное наименование то, по которому с первого взгляда Вам и Вашей команде понятно о чем идет речь.
    Ответ написан
  • Как мне реализовать выборку по данным, которые пользователь вводит в JSP форме?

    zolt85
    @zolt85
    Программист
    Форма с клиента уходит методом GET, либо POST, смотря что указано в атрибуте method тега form. По-умолчанию будет GET. Данные формы будут передаваться в URL-е, который указан в атрибуте action.
    В Вашем случае строка запроса будет иметь вид
    `scheduleByStationsAndDate/?stationDeparture="data"&stationArrival="data"` ну и так далее.
    Таким образом, чтобы принять это все на сервере надо писать примерно так:
    @RequestMapping(value="scheduleByStationsAndDate", params=["stationDeparture", "stationArrival", "dateDeparture"], method=RequestMethod.GET)
    @ResponseBody
    public String getScheduleByStationsAndDate(
        @RequestParam("stationDeparture") String stationDeparture, 
        @RequestParam("stationArrival") String stationArrival, 
        @RequestParam("dateDeparture") Date dateDeparture
    ) { ... }


    В случае POST запроса, метод может выглядеть так:
    @RequestMapping(value ="scheduleByStationsAndDate", method = RequestMethod.POST)
    @ResponseBody
    public String getScheduleByStationsAndDate(@RequestBody MyForm form) {...}

    Основная мысль думаю понятна. MyForm в данном случае обычный POJO в который Spring попытается смаппить данные пришедшие с клиента, в Вашем случае MyForm может выглядеть так
    public class MyForm {
    
        private String stationDeparture;
        
        private String stationArrival;
    
        private Date dateDeparture;
    
        //тут еще геттеры/сеттеры, ну всё как мы любим
    }


    Как-то так ...
    Ответ написан
    Комментировать
  • Почему не работает аннотация @Autowired вылетает nullPointerException?

    zolt85
    @zolt85
    Программист
    Сложно судить без stacktrace-а самой ошибки, но осмелюсь предположить, что проблема возникает из-за того, что Ваш RoleService не описан в конфигурации. В момент запуска теста, Spring читает конфигурацию только из db-config-test.xml, а в нем ни слова про RoleService. От того, что Вы поставили аннотацию Service на Вашу реализацию, класс не стал бином в терминах Spring. Ему [Spring-у] надо намекнуть, где эти самые бины искать, либо описать их явно в конфигурации. Как правило, для тестов пишется своя конфигурация, в которой объявляются только те бины, которые участвуют в тесте.
    Ответ написан
  • Как изменить параметры конфигурации бина при @EnableAutoConfiguration?

    zolt85
    @zolt85
    Программист
    Ответ написан
    Комментировать
  • MvcWebApplicationInitializer, о чем предупреждение при сборке?

    zolt85
    @zolt85
    Программист
    В первых двух методах Вы описываете возвращаемое значение как Class<?>{}. Это можно интерпретировать как "массив классов, типизированных неизвестным типом". При этом Вы возвращаете Class[] (без <?>), что интерпретируется как "массив классов, никаким типом не типизированных". Для компилятора, в принципе, особой разницы между этими записями нет, по этому он выдает только предупреждение, что ожидалось возвращение массива типизированных Class, а возвращается массив не типизированных.
    Ответ написан
    Комментировать
  • Что дает Java Spring?

    zolt85
    @zolt85
    Программист
    Spring Framework, как и любой другой уважающий себя framework, дает Вам основу, скелет, систему координат, в которой Вы (а еще важнее не только Вы, но и другие разработчики) разбираетесь и ориентируетесь. И вот используя этот скелет, можно строить приложения. В основе своей Spring Framework это про бины, управление бинами и IoC (Inversion of Control). Поверх всего этого строятся остальные модули Spring Security, Spring MVC и прочие (тысячи их!).
    Ответ написан
    Комментировать
  • Как объявить скоп сервиса так, чтобы при вызове в RabbitListener сервис был заново инициализирован?

    zolt85
    @zolt85
    Программист
    Для того, чтоб спринговый бин инициализировался каждый раз, когда он будет запрошен, его нужно отметить аннотацией
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    Тут есть некоторые нюансы, а именно, если Вы будете инжектить такой бин в другой бин, который является синглтоном (по-умолчанию), то заинжектится такой бин только один раз, соответственно по-факту это будет синглтон.
    А если Вы будете просить такой бин в коде у ApplicationContext, то да, всегда будете получать новый инстанс бина.
    Ответ написан
  • Java EE, Spring core/web. Как правильно настроить application context с помощью аннотаций?

    zolt85
    @zolt85
    Программист
    Если хочется все настроить через аннотации, то все возможно


    Как все это дело прикрутить к web.xml?
    Нужно ли создавать отдельный класс-context и описывать зависимости там?

    web.xml вообще не нужен. Можно инициализировать dispatcher-servlet так
    package configuration;
    
    import org.springframework.web.servlet.support.*;
    
    /**
      * Настройка dispatcher-servlet
     */
    public class MyAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
    
    	@Override
    	protected Class<?>[] getRootConfigClasses() {
    		return null;
    	}
    
    	@Override
    	protected Class<?>[] getServletConfigClasses() {
    		return new Class[]{MvcContext.class};
    	}
    
    	@Override
    	protected String[] getServletMappings() {
    		return new String[]{"/"};
    	}
    }


    Тут надо обратить внимание на метод getServletConfigClasses. Им мы отдаем классы конфигурации dispatcher-servlet.
    MvcContext.java может выглядеть так
    @Configuration
    @EnableWebMvc
    public class MvcContext {/** тут описываем бины или иные настройки */}


    Аннотация @Configuration говорит Spring-у что класс может содержать описания бинов.
    Аннотация @EnableWebMvc импортирует базовую настройку spring-mvc (контроллеры, резолверы, хэндлеры всё вот это вот)

    Какие аннотации к какому из представленных классов использовать и почему?


    User - @Entity - я так понимаю JPA для работы с БД используется
    UserService - @Service - ни к чему эта аннотация не обязывает, просто для удобства
    MainController - @Controller - Spring поймет что класс обрабатывает HTTP запросы
    остальные классы можно отметить аннотацией @Component, если они используются как бины спринга

    Вызывается ли конструктор класса (например - UserService) при инициализации его как Bean?

    Да, конечно. Как правило вызывается конструктор по-умолчанию, если таковой отсутствует, Spring свалится при старте приложения с ошибкой, что мол не могу создать бин.

    Еще советую Вам ознакомиться с книгой Крейга Уоллса "Spring в действии" (4-е издание, по-моему, сейчас актуально). Дядька очень доступно объясняет все заданные Вами вопросы, и работу многих компонентов фреймворка в целом.
    Ответ написан
    Комментировать
  • Используются ли сервлеты в Spring REST?

    zolt85
    @zolt85
    Программист
    Мне кажется Вы тёплое с мягким перепутали ... Я вообще не понял про какие Spring сервлеты Вы говорите, и что есть Spring rest? И почемы Вы это называете "обертками над стримами"? Сервлеты в Spring есть, как минимум один - DispatcherServlet. Если Вы хотите иметь response и request в методе своего контроллера, то просто укажите их в сигнатуре метода
    public void methodWithRequestAndResponse(HttpServletRequest request, HttpServletResponse response) { ... }

    Spring такие вещи видит, и услужливо передает нужные переменные при вызове метода.
    Ответ написан
    Комментировать
  • Как более правильно организовать (удаленную) разработку backend для Android Application, вкл Spring Boot, MySQL, servlet container?

    zolt85
    @zolt85
    Программист
    Во-первых, Вам нужно договориться об используемых инструментах, о настройках окружения. Отказываться от IDE не советую, т.к. это сильно снизит Вашу производительность. У каждого разработчика должна быть локально настроена среда с БД, Томкатом и прочим. Изменения БД лучше всего доносить через миграции, при помощи liquibase например.

    Для грамотного деплоя можно попробовать пайплайны в GitLab или Bitbucket. Для работы с Git Вам также всем надо договориться. Как разрабатываются фичи? Делать отдельные ветки под каждую задачу? Кто может пушить в master? И т.д.

    Обязательно проводите ревью кода друг друга.

    VPS для stage и produсtion среды это норм. Опять же надо договориться, кто будет отвечать за настройку и состояние этих VPS.

    В общем разработка ПО командой, это не столько написание самого кода, сколько коммуникации в команде.
    Ответ написан
    Комментировать
  • Как запустить дефолтное приложение Spring boot 2.x?

    zolt85
    @zolt85
    Программист
    NoClassDefFoundError говорит о том, что в момент исполнения кода класс не удалось найти в classpath приложения. Т.е. в момент компиляции он есть, а в момент выполнения недоступен. Посмотрите все-таки зависимости runtime и compile. Думаю если вы выложите свой "скелет" на Github и дадите народу ссылку, Вам быстро укажут на причину ошибки.
    Ответ написан
    1 комментарий
  • Ошибка доступа к статическим ресурсам SpringBoot, куда смотреть?

    zolt85
    @zolt85
    Программист
    Все Вам верно Spring говорит. Попробуйте ссылки на ресурсы в html подключать как "@{/resources/css/bootstrap.min.css}". Либо хендлеры добавьте по-другому
    @Configuration
    @EnableWebMvc
    public class MvcConfiguration extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry
                    .addResourceHandler("/js/**")
                    .addResourceLocations("/resources/js/");
            registry
                    .addResourceHandler("/css/**")
                    .addResourceLocations("/resources/css/");
        }
    }
    Ответ написан
  • Как опубликовать Java (RESR API) проект на хостинге?

    zolt85
    @zolt85
    Программист
    VPS хороший вариант.
    Можно еще попробовать таких друзей как
    https://www.openshift.com/
    https://www.heroku.com/
    Ответ написан
    3 комментария
  • Нужно ли применять Spring Security на сервере, если конектиться андроид приложение?

    zolt85
    @zolt85
    Программист
    Если у Вас открытые данные, и в принципе кто угодно может получать к ним доступ, то наверное можно не заморачиваться. Если в Вашем приложении предусмотрена регистрация, авторизация, то при помощи Spring Security Вы сможете разрулить авторизованный доступ к данным.
    Ну это если в кратце.
    Ответ написан
  • Как влиться в Spring и что на нем разрабатывать в одиночку?

    zolt85
    @zolt85
    Программист
    Ну тут стандартно. Можешь бложик написать. Советую книгу Spring in Action, Крейга Уолша, очень доступно дядька описывает возможности Spring Framework с примерами.
    Есть стандартное приложение-пример Pet Clinic.
    Ответ написан
    2 комментария