![](/img/trans.png)
[英]Spring Boot Rest API Returns Empty JSON Used with Lombok
[英]Spring Boot - Rest Controller is returning empty object when using Lombok
我正在使用 Spring Boot 2.1.4 和Gradle 5.0
開發一個簡單的 Rest API。 我正在使用Lombok v1.18.6
來構建我的類,但是當我調用服務時,我收到了一個空對象
我嘗試手動添加 getter 和 setter 方法並解決了問題,但我想知道為什么lombok
在我的項目中不起作用。
此外,我的 IDE 正在正確識別 lombok 插件。 我正在使用 IntelliJ IDEA
我的gradle依賴:
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": []
}
]
實際上,我覺得奇怪的是,顯示的唯一屬性是具有@JsonProperty
注釋的languages
,為什么會發生這種情況?
更新
我剛剛意識到我的 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
它可能不適合您的原因是,您的項目未設置為將IDE構建委派給Gradle,並且未對項目啟用注釋處理,或者以某種方式錯誤配置。
設置 - >構建,執行,部署 - >構建工具 - Gradle - > Runner
設置 - >構建,執行,部署 - >編譯器 - >注釋處理器
您是否嘗試從命令行構建並運行Gradle,以排除IntelliJ中的錯誤配置?
我懷疑Hibernate不喜歡Lombok自動生成的完全等號。 你應該試試:
@Entity
@Data
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@EqualsAndHashCode.Include
@Column(name = "id_category")
private int idCategory;
Hibernate希望它的上下文緩存在PrimaryKeys上匹配,但是Lombok生成一個匹配所有字段的Equals,這意味着實體中的單個更改將破壞緩存並可能阻止實體正確加載。
這可能是由於categoryService.findAll();
具有不同的映射名稱。
例如,對於idCategory
,結果有id_category
。 由於這個id_category
沒有被映射到idCategory
。
所以你可以使用,
@JsonProperty("idCategory")
你可以用這個注釋
@JsonProperty("idCategory")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.