Использование зависимости lombok в моем проекте spring-boot, но метод получения приводит к ошибке во время выполнения (хотя построен успешно)

#spring-boot #intellij-idea #lombok #intellij-plugin #intellij-lombok-plugin

Вопрос:

Я разрабатываю проект spring-boot, используя Gradle в качестве инструмента сборки в среде IDE ItelliJ.

У меня есть зависимость lombok , объявленная в gradle.build:

 dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web:2.5.3'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compileOnly 'org.projectlombok:lombok:1.18.20'
}
 

У меня есть класс моделей:

 import lombok.Data;
import java.math.BigDecimal;

@Data
public class ProductModel {
    private String name;
    private BigDecimal price;
    private Integer quantity;
}

 

Как вы можете видеть, я прокомментировал @Data это .

У моего контроллера есть метод обработки POST запроса, его полезная нагрузка сопоставляется с ProductModel :

 @PostMapping
public String createProduct(@RequestBody ProductModel productPayload) {
       // Runtime error: error: cannot find symbol, 'getName' in 'ProductModel'
       productPayload.getName();
}

 

Я знаю, что мне нужно установить плагин lombok в моей интегрированной среде разработки IntelliJ, чтобы избежать ошибки компилятора в методе получения. Поэтому я так и сделал. Но когда я запускаю свое приложение, я получаю ошибку:

 error: cannot find symbol
symbol:   method getName()
location: variable productPayload of type CreateProductRestModel
 

Я также попытался изменить зависимость с compileOnly на implementation :

 implementation 'org.projectlombok:lombok:1.18.20'
 

Это не помогает. Это почему? Что я упускаю?

(Я тоже включил annotationProcessor свой IntelliJ)

Комментарии:

1. вы только установили плагин или также активировали обработку аннотаций? также в gradle есть annotationProcessor и testAnnotationProcessor зависимости, которые следует установить.

2. Я забыл упомянуть, что я включил аннотационный процессор в IntelliJ. Не могли бы вы предоставить фрагмент кода для annotationProcessor in gradle?

3. Вот, пожалуйста projectlombok.org/setup/gradle

4. @thinkgruen не могли бы вы, пожалуйста, дать ответ, я приму его. Спасибо!

Ответ №1:

Для того, чтобы Gradle мог использовать процессоры аннотаций, они ввели отдельную конфигурацию, которая будет генерировать весь новый код перед «обычной» компиляцией.

Для Ломбока это выглядело бы примерно так:

 dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'
    
    testCompileOnly 'org.projectlombok:lombok:1.18.20'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
}