• Как правильно подгружать ресурсы в Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Еще простое решение -
    Создайте файл ApplicationProperties
    @Configuration
    @ConfigurationProperties(prefix = "application")
    public class AppProperties {
    
        @Getter
        @Setter
        private String baseUrl;
    
       
        @Getter
        @Setter
        private String uploadPath;
    
    }


    Добавьте нужные конфиги:
    application.base_url=http://localhost:7777
    application.upload_path=/home/admin/application.com/uploads

    Обратите внимание на названия параметров.
    Сперва в конфиге указываем префикс application (вы можете указать свой префикс).
    Далее base_url => baseUrl upload_path => uploadPath

    Далее в MyApplication (в точку входа приложения) добавьте аннотацию:

    @EnableConfigurationProperties({
            ApplicationProperties.class
    })
    public class MyApplication {
    }


    Теперь в любом компоненте Spring вы можете аутовайрить этот класс и при помощи геттеров получать нужные параметры.
    Вот, .пример:

    @Controller
    @RequiredArgsConstructor
    public class MyController {
    
    private final ApplicationProperties properties;
    
    // ... тут методы контроллера
    String uploadPath = properties.getUploadPath();
    //...
    
    }

    Источник - https://www.baeldung.com/properties-with-spring
    Ответ написан
    Комментировать
  • Работа с Датой в Java?

    Djaler
    @Djaler
    Сеньор-помидор
    Встроенных в Java 8 LocalDateTime, ZonedDateTime более чем достаточно
    Ответ написан
    Комментировать
  • Нормально ли вызывать private-методы с определенными аннотациями при помощи рефлексии?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Использовать рефлексию позволительно только разработчикам инструментальных средств и в редких случаях разработчикам фреймворков.
    Ответ написан
    1 комментарий
  • Что использовать для построения GUI?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    JavaFX
    Ответ написан
    Комментировать
  • Использовать ли JSP в Java Servlets?

    @jkotkot
    режим сарказма
    jsp прилично устарели, хоть их и обновляют иногда(редко). и я не припомню кого-то, кто бы в здравом уме использовал их в серьезном проекте
    В тренде springmvc + thymeleaf и подобные комбинации.
    Ответ написан
    3 комментария
  • Стал работать по часам и обнаружил, что выходит 6 часов в день. Это нормально?

    Не понимаю как можно писать код 8 часов, вы там новый яндекс каждый день пишите?) 8 часов именно кода, там куча строк на выхлопе, 2-3 часа в день на код, остальное время на оформление тасков и подбор решения, чтобы в 2-3 часа кодинга ни на что не отвлекаться
    Ответ написан
    1 комментарий
  • С чего нужно начать изучать программирование нейронных сетей?

    AgentProvocateur
    @AgentProvocateur
    методично, всерьёз и надолго погрузиться в тему

    Погружайся)) Методичнее некуда)
    59f726f14da9a668973662.png
    Ответ написан
    12 комментариев
  • Какой логгер для Java использовать в 2017 году?

    @protven
    slf4j - не логгер, а апи к логгерам, обертка над ними. Я бы рекомендовал slf4j + logback. Мы используем, по-моему стандарт де-факто сейчас.
    Ответ написан
    3 комментария
  • Как привести словесный пример полиморфизма?

    @kttotto
    пофиг на чем писать
    Когда Вам нужно что-то записать, обычно берут листочек и ручку. А можно не ручку, можно карандаш, можно фломастер или перьевую ручку. Полиморфизм будет заключаться в том, что Вам нужен объект, которым можно что-то записать, а какой конкретно и как он реализует саму запись Вас не сильно беспокоит. Т.е. когда Вы скажите: "дай мне объект для записи", Вам можно будет подсунуть любой объект, который как абстракция будет является "перо".

    Когда Вы хотите спать, Вы говорите: "дай мне на что можно лечь". И можно будет лечь хоть на диван, хоть на кровать, хоть на кресло-кровать. Абстрактно это все будет "кровать", но реализацию будет иметь разную.

    Полиморфиз удобен когда например могут быть изменения, дополнения в коде. Тогда мы абстрагируемся от конкретной реализации, создаем абстрактный класс и в метод уже запрашиваем объект этого типа. А во время выполнения мы может подсунуть для выполнения объект любого другого типа, который будет отнаследован от этого абстрактного и будет иметь свою реализацию каких то методов. Так что да, это "динамическая смена реализации".
    Ответ написан
    Комментировать
  • Какую книгу для уверенного Junior JAVA посоветуете?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Комментировать
  • Где взять задачи/мини-проекты по ООП?

    @frozen_coder
    Java-developer
    Уже написали, что это просто подход. А я дам вам пару наводок для размышления.

    ООП парадигма нужна для представления объектов и процессов из реального мира в виртуальном через абстракции, грубо говоря. Так вот и переводите какие-нибудь процессы и объекты из жизни в абстракции.

    Примеры:
    Работа магазина. Там есть всякие товары, продажа-покупка и т.д. и т.п. Можно наворотить.
    Работа склада. Тоже самое, товары, складские журналы, поступление, списание и прочие прелести.
    Работа банка. Валюта, вклады и кредиты всякие и т.д. и т.п.
    Работа автомастерской, стоянки, булочной, столовой, полицейского участка, мед. пункта и тд и тп.
    Какой-нибудь справочник-реестр-библиотека-каталог каких-нибудь составных записей из разных других записей, в которых тоже есть какие-нибудь записи с возможностью добавления, удаления, объединения, редактирования при условиях той фазы луны, погоды за окном и вашего расположения духа.
    И побольше наследований и всяких отношений между сущностями.

    Также советую почитать книгу банды четырех про паттерны ООП. Возможно тоже в голову полезут примеры, а руки что-нибудь и реализуют.
    Ответ написан
    Комментировать
  • Spring и SphinxSearch как использовать?

    @protven
    Господи, ужас-то какой. class.forName, DriverManager... Как-будто в 90-е окунули. Возьмите нормальный пул коннектов и не парьтесь. c3po, HikariCP, tomcat jdbc pool и тд.
    Ответ написан
    1 комментарий
  • Как сделать валидацию данных?

    jaxtr
    @jaxtr
    JavaEE/Spring-разработчик
    Я на практике использую следующий подход: для каждой хранимой сущности, которую может создать/изменить пользователь, я создаю класс, описывающий форму (иногда бывает, что для редактирования и создания используются даже разные классы в виду разного набора полей).
    Это делается по двум причинам: во-первых - не все поля в хранимой сущности пользователи могут создавать/изменять (например, даты создания/редактирования и идентификаторы), во-вторых - вынесение аннотаций валидации из класса сущности.

    Теперь ближе к делу: для валидации существуют аннотации из пакета javax.validation.constraints, а также дополнительные, предоставляемые реализациями Bean Validation API (например @Email из Hibernate Validator).

    Допустим, у нас есть класс, представляющий собой форму регистрации:
    SignUpForm.java
    public class SignUpForm {
        @Email
        private String email;
    
        @Size(min = 8)
        @Pattern(regexp = "какая-нибудь регулярка для проверки надёжности пароля")
        private String password;
    }


    В контроллере мы будем принимать форму таким образом:
    SignUpController.java
    public class SignUpController {
        public ResponseEntity signUp(@RequestBody @Valid SignUpForm form, BindingResult bindingResult) {
        }
    }



    В form будут содержаться данные, отправленные пользователем, а в bindingResult - результат валидации, который можно легко проверить, вызвав bindingResult.hasErrors(). Отмечу только то, что аргумент класса BindingResult должен быть сразу после аргумента, помеченного аннотациями @RequestBody и valid, в других случаях валидация работать не будет.

    Но дальше - больше. Допустим, нам нужно добавить поле для подтверждения пароля и проверять его соответствие паролю. В таком случае нам надо добавить свою аннотацию (в данном случае на класс) и валидатор.
    Новый класс формы:
    SignUpForm.java
    @PasswordMatch
    public class SignUpForm {
        @Email
        private String email;
    
        @Size(min = 8)
        @Pattern(regexp = "какая-нибудь регулярка для проверки надёжности пароля")
        private String password;
    
        private String passwordConfirmation;
    }


    Аннотация:
    PasswordMatch.java
    @Target({TYPE, ANNOTATION_TYPE})
    @Retention(RUNTIME)
    @Constraint(validatedBy = PasswordMatchValidator.class)
    @Documented
    public @interface PasswordMatch {
    
        String message() default "{constraints.passwordmatch}";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
        @Target({TYPE, ANNOTATION_TYPE})
        @Retention(RUNTIME)
        @Documented
        @interface List {
    
            PasswordMatch[] value();
        }
    }


    Ну и валидатор:
    PasswordMatchValidator.java
    public class PasswordMatchValidator implements ConstraintValidator<PasswordMatch, SignUpForm> {
    
        @Override
        public void initialize(PasswordMatch constraintAnnotation) {
        }
    
        @Override
        public boolean isValid(SignUpForm value, ConstraintValidatorContext context) {
                return Objects.equals(value.getPassword(), value.getPasswordConfirmation());
        }
    }


    И ещё один способ валидации - при помощи спринговых валидаторов. Допустим, нам нужно проверить существование указанного email в нашей БД, что вполне вписывается в процесс валидации. В таком случае пишем валидатор:
    SignUpFormValidator.java
    public class SignUpFormValidator implements Validator {
        public boolean supports(Class<?> type) {
            return SignUpForm.class.isAssignableFrom(type);
        }
        public void validate(Object target, Errors errors) {
            SignUpForm form = (SignUpForm) target;
            // проверяем, что нужно и добавляем ошибки в errors, если они есть
        }
    }


    Регистрируем его в контроллере:
    SignUpController.java
    public class SignupController {
        @InitBinder
        public void initBinder(WebDataBinder binder) {
            binder.addValidators(new SignUpFormValidator());
        }
    }


    После этого Spring будет производить дополнительную валидацию при помощи этого валидатора.

    Более подробно с валидацией в Spring можно почитать в официальной документации.
    Ответ написан
    Комментировать
  • Фриланс, заказчик требует выставления счёта, чтобы не платить 27% взносов, как всё сделать без ИП?

    Jump
    @Jump
    Системный администратор со стажем.
    как всё сделать без ИП
    Открыть ООО.
    Ответ написан
    Комментировать
  • Как прочитать строку по словно?

    @aol-nnov
    я тебе подскажу, только убери "Java-разработчик" в своей подписи, ладно? это даже не ясельная группа.
    Ответ написан
    1 комментарий
  • Можно ли с помощью foreach вывести матрицу???

    al_gon
    @al_gon
    public class EntryPoint {
    	public static void main(final String[] args) {
    		final int numbers[][] = new int[][] { { 1, 2, 3 }, { 3, 2, 1 }, { 2, 3, 1 } };
    		Stream.of(numbers).map(Arrays::toString).forEach(System.out::println);
    	}
    }
    Ответ написан
    1 комментарий
  • Имеет ли значение среда разработки при изучении Java (Intellij Idea и Eclipse)?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Не думал что кто то еще пользуется Eclipse (видимо динозавры).
    Последний раз открывал данную ide в 2006г.
    Столько же лет не видел разработчиков пользующихся eclipse.

    Большинство пользуются продукцией jetbrains.
    Ответ написан
    7 комментариев
  • GeekBrains - Что и как? Надо ли?

    mihal8899
    @mihal8899
    Любитель
    Там уже раза 3 или 4 были кардинальные изменения. Начиная от смены директоров, руководителей, учителей и до дизайна, наименования (раньше были ШП) и рекламной тактики. В плане обучения всё тоже самое - погромисты (дай бог знающие предмет) рассказывают про то что такое переменные, циклы, ветвления и называющие это гордо: "Курс, который сделает из вас профи!". Всё это в моих глазах - разводка.

    Из всех курсов что знаю, более или менее качественные от центра Специалист, там хотя-бы фундаментальные знания закладывают и преподы с реальным опытом обучения людей в ВУЗах и репетиторстве (а то и имеющие образование в сфере педагогики). Но правда больно затянуты по времени. Курс может до 40-50 часов запросто достигать, а то и больше.
    Ответ написан
    1 комментарий