我正在使用Spring Boot 2.1.4和Gradle 5.0
开发一个简单的Rest API。我正在使用Lombok v1.18.6
构建我的类,但当我调用服务时,我收到了一个空对象
我尝试手动添加getters和setters方法,它解决了这个问题,但我想知道为什么< code>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;
}
我的rest控制器:
@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": []
}
]
实际上,我觉得奇怪的是,唯一显示的属性是语言
,它具有@Json属性
注释,为什么会发生这种情况?
更新
我刚刚意识到我的 IDE (IntelliJ) 正在识别龙目岛插件,并且我还启用了注释处理,但是当我尝试使用 getter 或 setter 执行我的代码时,它会抛出错误:
Error:(18, 26) java: cannot find symbol
symbol: method setName(java.lang.String)
location: class com.ramonparis.cvmanager.model.Category
我怀疑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,这意味着实体中的单个更改将损坏缓存,并可能阻止正确加载实体。
它可能不适合您的原因是,如果您的项目未设置为将IDE构建委托给Gradle,并且未为项目启用注释处理,或者以某种方式配置错误。
设置-
您是否尝试过从命令行构建和运行Gradle,以排除IntelliJ中的错误配置?
但是,当我返回列表时,就像这段代码: 对于完全相同的API的列表返回类型的响应是正确的响应: [{“SellingPrice”:23000,“ID”:1,“Version”:1,“CreatedOn”:“25Feb 2019,05:53”,“LastUpdatedOn”:“25Feb 2019,05:53”}]
我在gradle项目中使用lombok,希望创建一个jar文件,但每次我执行jar任务(无论是在控制台还是eclipse ide中触发)时,我都会发现错误,我的lombok导入在我使用lombok注释的类中找不到。输出示例: 搜索了一段时间后,我发现有一个适用于gradle和lombok的插件,但在使用较新的gradle版本编译时并不真正需要。我的gradle版本是3.4.1和lombok 1.6
我有一个名为Address的类,如下所示: 在这里,我不得不编写生成器和Getter,因为如果我想在使用Lombok时返回一个Optional,我必须将第2行声明为Optional 是否有其他方法可以将lombok与
Lombok@Data annotation将在带注释的类上无声地添加字段的setter和getter。 如何在龙目岛添加基于条件的setter? lombok中有没有这样的支持 我已经在龙目岛文件中搜索了,我没有看到关于我的问题的解释。
我正在使用Lombok的注释在我的类中创建一个超级构造函数。 我的抽象控制器类: 我的控制器实现类: 我的服务类别: 基本上,我希望Lombok在中创建一个类似的构造函数 我的应用程序无法启动,错误消息如下所示: MyAbstractControllerImpl中构造函数的参数0需要类型为“MyAbstractControllerImpl$MyAbstractControllerImpBuilde
我有以下控制器: 当响应为HttpStatus时。好的,我可以读取客户端中的字符串响应: 但是当我返回Httpstatus时。BAD_REQUEST响应总是空的: 即使e.getMessage()具有消息的有效字符串。 这是我用于使用此服务的代码: