首页 > 解决方案 > Spring Boot - 使用 Lombok 时,Rest Controller 返回空对象

问题描述

我正在使用 Spring Boot 2.1.4 和Gradle 5.0. 我Lombok v1.18.6用来构建我的类,但是当我调用服务时,我收到一个空对象

我尝试手动添加 getter 和 setter 方法并解决了问题,但我想知道为什么lombok在我的项目中不起作用。

此外,我的 IDE 正在正确识别 lombok 插件。我正在使用 IntelliJ IDEA

我的梯度依赖:

    compileOnly 'org.projectlombok:lombok:1.18.6'
    annotationProcessor 'org.projectlombok:lombok:1.18.6'

我的模型课:

@Entity
@Data
public class Category implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_category")
    private int idCategory;

    @NotBlank
    private String name;

    @OneToMany(mappedBy = "category", cascade = CascadeType.ALL, orphanRemoval = true)
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private List<Language> languages;
}

我的休息控制器:

@RestController
@RequestMapping("/categories")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    @GetMapping
    public ResponseEntity<List<Category>> findAllCategories(){
        List<Category> categories = categoryService.findAll();
        return new ResponseEntity<List<Category>>(categories, HttpStatus.OK);
    }
}

我收到此回复:

[
    {
        "languages": []
    }
]

但我期望收到的是:

[
    {
        "idCategory": 1,
        "name": "Backend" 
        "languages": []
    }
]

实际上,我发现唯一显示的属性是languages具有@JsonProperty注释的属性,这很奇怪,为什么会发生这种情况?

更新

我刚刚意识到我的 IDE(IntelliJ)正在识别 lombok 插件,并且我还启用了注释处理,但是当我尝试使用 getter 或 setter 执行我的代码时,它会引发错误:

Error:(18, 26) java: cannot find symbol
  symbol:   method setName(java.lang.String)
  location: class com.ramonparis.cvmanager.model.Category

标签: javajsonrestspring-bootlombok

解决方案


它可能对您不起作用的原因是,如果您的项目未设置为将 IDE 构建委托给 Gradle,并且未为该项目启用注释处理,或者以某种方式配置错误。
Settings -> Build, Execution, Deployment -> Build Tools - Gradle -> Runner
Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors

您是否尝试过从命令行使用 Gradle 构建和运行,以排除 IntelliJ 中的错误配置?


推荐阅读