Pull to refresh
29
0
Григорий Кислин @gkislin

Автор онлайн обучения Java: https://javaops.ru

Send message

Мигрируем Java Spring Boot приложение на Kotlin

Level of difficulty Medium
Reading time 6 min
Views 5.9K

Доброе время!

Немного статистики по Kotlin: по недавней выборке на hh.ru в вакансиях "программист, разработчик" по слову Java и Kotlin почти треть вакансий (а в некоторых регионах больше) требуют владения Kotlin. А по последнему  отпросу от AZUL 2023 47% организаций используют Kotlin. Таким образом освоив Kotlin и добавив в резюме репозиторий с проектом на нем вы получите на 30% больше возможностей!

Как известно, лучший способ выучить новый язык программирования - это пройти курсы сделать на нем проект. Для Java программистов на мой взгляд самый простой и эффективный способ - взять собственный небольшой Spring Boot REST API проект и сделать его миграцию.

В рамках наших курсов "Из Middle в Senior" (см. предыдущий пост по курсу «Работа с документами в Java») я выпустил новый курс Spring Boot REST API приложение на Kotlin и хочу поделиться здесь особенностями миграции и полезными ссылками для тех, кто захочет это сделать самостоятельно. Статья в помощь тем, кто решил мигрировать на Кotlin свой Java проект, НЕ для изучения основ Kotlin.

Итак, приступим:
Total votes 10: ↑7 and ↓3 +4
Comments 8

Упрощаем работу с Excel с помошью Apache POI + Jxls: готовый шаблонный код

Level of difficulty Medium
Reading time 7 min
Views 5K
Доброе время!

В рамках нашего свежего курса «Работа с документами в Java» есть тема: «Работа с Excel с помощью Apache POI». Хочу поделиться здесь основными моментами кода этого занятия и решением проблем, с которыми пришлось столкнуться.

Пошаговое практическое руководство c преобразованием шаблона poiTemplate.xlsx в Excel документ с возможностью программной модификации страниц. Также код может послужить образцом применения паттерна стратегия.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Comments 2

JSON Web Token (JWT) — пример Java реализации на Spring Boot OAuth2 Resource Server 6.0

Reading time 3 min
Views 11K

Доброе время!

Часть 2-я по открытому занятию нового учебного курса: реализация простого JWT через новый Spring Boot OAuth2 Resource Server (первая часть: Spring Boot 3.0 — готовимся заранее). Что такое JWT и зачем, писать здесь не буду - в сети материалов много, начинать знакомство обычно рекомендую с Википедии. А вот хорошая ссылка по реализации JWT+OAuth2. Здесь я привожу Java код, основанный на официальном примере spring-projects - простейшей реализации JWT Login Sample (без refresh token и отдельного авторизационного сервера), "творчески доработанный" и с моими пояснениями. Еще раз - без теории, для тех, кому интересен код актуальной Java реализации. Если это Вы - прошу.

к прочтению.
Total votes 8: ↑3 and ↓5 -2
Comments 0

Spring Boot 3.0 — готовимся заранее

Reading time 2 min
Views 17K

Здравствуй, читатель Хабра!
До выхода Spring Boot 3 осталось совсем немного - 3 месяца. Уже появляются статьи -
What’s New, It's time to get ready. Недавно JetBrains выпустила IDEA с поддержка Spring 6 и Spring Boot 3. Самое время потренироваться заранее в миграции. В разработке нового учебного курса я попробовал перевести свой открытый учебный проект Spring Boot 2.x + HATEOAS на Spring Boot 3, шаги и код проекта ниже.

Читать далее
Total votes 22: ↑9 and ↓13 -4
Comments 5

Интеграция с amoCRM — паранойя безопасности

Reading time 3 min
Views 3.9K

«Заставь дурака Богу молиться — он лоб разобьёт»

Здравствуйте! Хочу поделиться накипевшим - головной болью интеграции с API сторонних приложений. В этой статье - c авторизацией для API достаточно популярной amoCRM, без кода и лишних деталей.

Читать далее
Total votes 5: ↑5 and ↓0 +5
Comments 6

Рекомендации по реализации тестового задания (и не только): Java проект с REST API

Reading time 6 min
Views 11K

Эти рекомендации - адаптированный под публикацию результат 5-летних проверок выпускных работ участников нашей стажировки "Enterprise Java-разработчик". Часть из них относится только к выполнению тестового задания при устройстве на работу: Java-приложение с REST API. Часть - к разработке на Java. И часть - к разработке любых приложений. Надеюсь, что каждый найдет что-то полезное. Буду рад обсуждению спорных тем в комментариях.

Читать далее
Total votes 9: ↑7 and ↓2 +5
Comments 18

Spring и JDK 8: Вы все еще используете @Param и name/value в Spring MVC аннотациях? Тогда статья для Вас

Reading time 3 min
Views 21K


Здравствуй, Хаброчитатель!


Разрабатывая учебный проект по Spring Boot 2 решил поэкспериментировать с @Param в запросах Spring Data JPA, а точнее c их отсутствием:


@Transactional(readOnly = true)
public interface UserRepository extends JpaRepository<User, Integer> {

   @Query("SELECT u FROM User u WHERE LOWER(u.email) = LOWER(:email)")
   Optional<User> findByEmailIgnoreCase(@Param("email") String email);

   List<User> findByLastNameContainingIgnoreCase(@Param("lastname") String lastName);
}

(про магию, как работает второй метод есть в старой публикации По следам Spring Pet Clinic).


Убрав @Param можно убедится, что Spring прекрасно работает и без них. Я слышал про параметр в компиляции, который позволяет не дублировать названия в аннотациях, но я ничего не специального не делал, поэтому решил покопать поглубже подебажить.


Если Вы еще пользуетесь аннотациями из заголовка статьи, Spring Boot и JDK 8, прошу под кат:


UPDATE: аннотации @PathVariable и @RequestParam все еще часто нужны, чтобы приложение работало корректно. Но их атрибуты value/name уже не обязательны: соответствие ищется по именам переменных.

Читать дальше →
Total votes 22: ↑19 and ↓3 +16
Comments 7

Новое в Spring 5. Миграция проекта на Spring 5

Reading time 2 min
Views 14K
Здравствуйте! Продолжаю серию миграций на новые версии фреймворков.
В прошлый раз это был JUnit 5 за 10 мин., в этот раз будет Spring 5.

Когда говорят о новом в Spring 5, в основном начинают говорить про реактивный стек, опуская достаточно много того нового, что в нем появилось помимо него. Реактивных драйверов к базам данных совсем немного, поэтому мой видеообзор про остальные важные обновления, надеюсь, будет актуально для большинства пользователей Spring. Кроме того, вместе со Spring 5.x обновляются и все его зависимости: spring-data 2.x, spring-security 5.x. В январе этого года наш учебный проект Spring 5/JPA Enterprise (Topjava) мигрировал со Spring 4.3.x на Spring 5. Процесс прошел достаточно легко и в конце небольшого видео на 10 минут я также приведу все изменения в коде проекта.


Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Comments 0

Миграция на JUnit 5 за 10 мин. Измерение времени тестов с помощью Extensions

Reading time 2 min
Views 4.9K
Здравствуйте!

На последней стажировке Spring 5/JPA Enterprise (Topjava) наш учебный проект мигрировал с JUnit 4 на JUnit 5.2. Основной процесс миграции достаточно прямолинеен, но есть некоторые нюансы, которые требуют ручного вмешательства. Хочу кратко рассказать про них и создании JUnit 5 Extensions для измерения времени тестов в 10 минутном видео.


Код расширения для измерения времени тестов
import org.junit.jupiter.api.extension.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StopWatch;

public class TimingExtension implements BeforeTestExecutionCallback, AfterTestExecutionCallback, BeforeAllCallback, AfterAllCallback {

    private static final Logger log = LoggerFactory.getLogger("result");

    private StopWatch stopWatch;

    @Override
    public void beforeAll(ExtensionContext ctx) {
        stopWatch = new StopWatch("Execution time of " + ctx.getRequiredTestClass().getSimpleName());
    }

    @Override
    public void beforeTestExecution(ExtensionContext ctx) {
        log.info("Start stopWatch");
        stopWatch.start(ctx.getDisplayName());
    }

    @Override
    public void afterTestExecution(ExtensionContext ctx) {
        stopWatch.stop();
        log.info("stop stopWatch");
    }

    @Override
    public void afterAll(ExtensionContext ctx) {
        log.info('\n' + stopWatch.prettyPrint() + '\n');
    }
}


Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Comments 0

Подборка ресурсов для соискателя на вакансию программист

Reading time 2 min
Views 18K



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

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 3

Java XML API: выбираем правильно. StAX: работаем с удовольствием

Reading time 5 min
Views 57K
Здравствуйте!
Несмотря на снижение популярности формата XML с начала 2000х, он прочно занял свои ниши. Я сталкивался с обработкой XML ~ в 60% проектов и посвятил ей занятие своей стажировки Masterjava. Наиболее частые его применения: XHTML, SOAP, различные конфигурации (например Tomcat, SoapUI, IntelliJ IDEA, Spring XML конфигурация), импорт-экспорт данных.

В Java есть несколько API для работы с XML и для разработчика важно понимать, какое из API требуется выбрать в каждой конкретной ситуации. В этой статье я кратко перечислю все Java XML API, их назначение и примеры использования, и подробнее остановлюсь на работе с достаточно редкой, но в ряде случаев единственно верной технологией StAX. Предполагается что с элементами XML вы уже знакомы.
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Comments 8

Этапы развития проекта обучения Java Online Projects: как это было, взгляд изнутри

Reading time 6 min
Views 9.6K


Здравствуйте! Меня зовут Григорий Кислин, автор и ведущий учебных проектов и стажировок Java. Хотел рассказать с технической точки зрения, как проект жил и развивался. На каждом этапе приходилось выбирть только самые необходимые для текущей работы решения, которые реализовывались по принципу KISS, или, русский аналог ДУП: Дешево, Удобно и Практично.
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Comments 7

Интегрируем мессенджеры (на примере Slack): GitHub, RSS (в частности Java), вакансии под ваш запрос

Reading time 1 min
Views 6.8K


Привет, Хабр! В последнее время набирают популярность команды мессанждеров по интересам. Удобный интерфейс, разделение общения по каналом, общение в личке позволяет в них комфортно общаться большому (несколько сотен, а возможно и тысяч) человек. Интеграция с другими приложениями делает этот инструмент общения еще более полезным (список приложений для Slack). Приведу несколько примеров интеграций, которые используются в моем учебном проекте Java Enterprise (Topjava):
Читать дальше →
Total votes 17: ↑11 and ↓6 +5
Comments 9

Из юниоров в разработчики: получаем первую работу

Reading time 4 min
Views 77K


Здравствуйте! Коротко о себе: программирую с 1989 г., с 2005 года в Java, с 2013 года работаю Java-тренером (до января этого года совмещал с основной работой Java-разработчика). Достаточно много моих выпускников трудоустроились, и я хочу поделится своими соображениями, как получить работу Java-разработчика (и не только Java).

От изучения Java до получения оффера работы — большое расстояние


Требования к кандидатам на вакансию Java разработчика достаточно высоки, см. пример тестового задания на джуниора от одного из аутсорсеров РБ. Конечно есть позиции и с меньшими требованиям, но их не так много и, по статистике на Украине (dou работает через прокси, в России не нашел), соотношение Отклики/Вакансии на такие позиции: от 20 до 50.

Для вакансий с опытом работы (которых значительно больше) получается замкнутый круг: без опыта не получить работы, а без работы не получить опыта. На вопрос «Кто виноват?» ответ очевиден — компании, которые не хотят вкладывать время и деньги в обучение, а хотят получить уже готового специалиста. Остается главный вопрос:

Что делать?


Читать дальше →
Total votes 19: ↑12 and ↓7 +5
Comments 22

Spring/Jackson + @JsonView: фильтруем JSON

Reading time 3 min
Views 34K

Здравствуйте!

Недавно в своем учебном Spring проекте Java Enterprise (Topjava) столкнулся с задачей каcтомизации сериализации объекта User в JSON в зависимости от контроллера: для REST API контроллера нужно было возвращать хешированный пароль (поле user.password), а для контроллера отображения на UI- нет. Можно решить задачу в «лоб», сделав нестолько TO (Data Transfer Object), но в Spring 4.2+/Jackson 2.6 появилась возможность использовать Jackson’s Serialization Views. Однако с статье есть подвох, и для невнимательных читателей вьюхи работают не так, как он ожидает.

В результате мне пришлось немного покопаться в реализации Jackson, чтобы понять, как все это работает. Коротко об этом:
under cut
Total votes 19: ↑17 and ↓2 +15
Comments 5

Java: улучшаем качество кода (предусловия, IDEA QAPlug, интерграция GitHub c Codacy)

Reading time 1 min
Views 6.3K
Здравствуйте!
Продолжаю серию публикаций по учебному Java Enterprise проекту Topjava (Maven/Spring/Security/JPA(Hibernate)/Rest(Jackson)/ Bootstrap(CSS)/ jQuery+plugin).

Небольшая тема четвертого занятия: улучшаем качество кода


Полезные ссылки:

  1. Контрактное программирование, Программирование по контракту
  2. Comparison Preconditions in Java
  3. QAPlug vs FindBugs
  4. QAPlug tutorials
  5. Codacy Home
Читать дальше →
Total votes 6: ↑3 and ↓3 0
Comments 11

Эволюция Java на примере чтения строк из файла

Reading time 2 min
Views 126K
Приведу небольшой и интересный, на мой взгляд, пример, как изменилась жизнь простого крестьянина Java разработчика, на примере задачи чтения и печати строк из файла.



Многие из нас помнят

'до Java 7' мучения:


        BufferedReader reader = null;
        try {
            reader = new BufferedReader(
                        new InputStreamReader(
                            new FileInputStream(FILE_NAME), Charset.forName("UTF-8")));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // log error
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    // log warning
                }
            }
        }

Читать дальше →
Total votes 34: ↑18 and ↓16 +2
Comments 17

Деплой Java Spring приложения в PaaS-платформу Heroku за 14 минут

Reading time 2 min
Views 24K
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Comments 0

Spring Security 4 + CSRF (добавление в Spring проект защиты от межсайтовой подделки запроса)

Reading time 2 min
Views 38K


Здравствуйте!
Современное веб приложение считается уязвимым, если в нем отсутствует защита от Межсайтовой подделки запроса (CSRF).
В Spring Security 4.x она включена по умолчанию, поэтому при миграции с Spring Security 3.x на 4.x ее надо либо отключить
<http>
	...
	<csrf disabled="true"/>
</http>
либо, правильнее и зачетнее, добавить в проект.

Собственно, сделал это в 10-минутном видео:

Читать дальше →
Total votes 14: ↑10 and ↓4 +6
Comments 3

Тестируем Spring Rest контроллеры: проще, короче, надежнее. Spring Security Test + JSON Matcher

Reading time 3 min
Views 34K


Здравствуйте!
Собственный JSON Matcher, использование Spring Security Test, недавно вошедший в Spring Security 4.0, и отказ от транзакций при тестировании сервисов позволяют сделать тесты проще и надежнее.

Я использовал данный подход при создании приложения на своем курсе Topjava (Maven/ Spring/ Security/ JPA(Hibernate)/ Rest(Jackson)/ Bootstrap(CSS)/ jQuery + plugins).
Данная статья не является еще одним учебником по тестированию Spring REST контроллеров и предполагает что вы уже с ним знакомы.

Про выгоды отказа от транзакций я уже писал в предыдущей публикации По следам Spring Pet Clinic. Maven/ Spring Context/ Spring Test/ Spring ORM/ Spring Data JPA. К перечисленным недостаткам использования @Transaction еще можно добавить невозможность посмотреть реальные запросы при выполнении метода сервиса к базе (например при включенном hibernate.use_sql_comments)

Здесь я напишу как проще, короче, надежнее тестировать Spring REST контроллеры.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Comments 1
1

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Specialist
Lead
Java
Git
JavaScript
Training
Coaching
Interview
Team recruitment
IT consulting