Следующая конфигурация в pom.xml
решит проблему:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<jvmArguments>-Dfile.encoding=UTF8</jvmArguments>
</configuration>
</plugin>
</plugins>
</build>
Пояснение:
В консоли Windows кодировка cp1251 с вашей конфигурацией локали, а в консоли IntelliJ IDEA кодировка UTF-8.
При запуске из IntelliJ IDEA, опция -Dfile.encoding=UTF8
добавляется в командную строку, когда IDE запускает Maven, так что выходная кодировка Maven JVM совпадает с кодировкой консоли IDE.
Без spring-boot-devtools
эта опция передана правильно и учитывается процессом JVM, выполняющим ваш код в консоли IDE. Это тот же экземпляр JVM, на котором работает Maven, все работает нормально.
С spring-boot-devtools
зависимостью Maven JVM разветвляет другую JVM для запуска вашего кода, и опция кодировки файлов больше не передается ему. В качестве кодировки файла по умолчанию используется системный языковой стандарт для нового процесса JVM, и он становится cp1251, в то время как консоль IntelliJ IDEA все еще настроена на использование кодировки UTF-8. Вывод нарушен, как показано на скриншоте.
Конфигурация
spring-boot-maven-plugin
jvmArguments
должна использоваться для передачи опции кодирования разветвленной JVM. Это также заставляет консоль Windows использовать ту же кодировку, поэтому приложение продолжит корректно работать в командной строке.