Đã thêm thư viện Lombok nhưng khi chạy chương trình lại không nhận được getter, setter

Mình đã thêm thư viện Lombok vào chương trình, nhưng khi chạy nó lại báo lỗi không nhận được getter.
Mình đã sử dụng phần mềm eclipse có springtool
Đây là lỗi khi mình chạy phần mềm

 An error happened during template parsing (template: "class path resource [templates/add.html]").
 Error during execution of processor 'org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor' (template: "add" - line 10, col 40).
Invalid property 'id' of bean class [com.example.demo.models.Book]: Bean property 'id' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

Class Entity


import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Table(name = "book")
@Entity
@NoArgsConstructor
@Getter
@Setter
@AllArgsConstructor
public class Book implements Serializable{
	@Id
	private Long id;
	@Column
	private String name;
	@Column
	private String image;
	
}

Còn đây là class template của mình

<!DOCTYPE html >
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1">
<title>Insert Book</title>
</head>
<body>
	<form th:action="@{/save}" th:object="${book}" method="post">
		<div th:if="${id == null}">
			<input type="text" placeholder="Id" th:field="*{id}" /><br />
		</div>
		<input type="text" placeholder="Name" th:field="*{name}" /><br /> <input
			type="text" th:field="*{image}" placeholder="Image" /><br /> <input
			type="submit" value="Confirm"> <a th:href="@{/list}">List</a>
	</form>
</body>
</html>

Class Controller

@Controller
public class BookController {
	@Autowired
	private BookService bookService;
	
	@GetMapping("/")
	public String add(ModelMap model) {
		model.addAttribute("book", new Book());
		return "add";
	}
	
	@PostMapping("/save")
	public String save(ModelMap model, Book book) {
		bookService.save(book);
		model.addAttribute(book);
		return list(model);
	}
        @GetMapping("/list")
	public String list(ModelMap model) {
		List<Book> list = (List<Book>) bookService.findAll();
		model.addAttribute("books", list);
		return "list";
	}
}

Khi mình getter/setter bằng thủ công thì chạy được nhưng khi sử dụng Lombok thì phát sinh lỗi khi chạy

Bạn đọc chỗ nào thấy báo lỗi của Lombook thế ?

2 Likes

Lombok có 2 cái là add thư viện vào project và cài thêm plugin nữa thì phải.

4 Likes

nó thông báo không nhận được getters và setter
Invalid property 'id' of bean class [com.example.demo.models.Book]: Bean property 'id' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

1 Like

plugin thì có trong file POM rồi

				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>

Trong pom.xml là dependency, kiểu như là thư viện. Còn plugin cho IDE là khác.


Cần cài cả 2 cái thì mới code Lombok được.

1 Like

nó thông báo là có sẵn rồi

:expressionless:

  • Cậu không phân biệt được lỗi runtime và lỗi compile. Hình đầu tiên của cậu đưa ra là lỗi 500, xảy ra do không đọc được file templates/add.html.
    Lombok là thư viện generate code, nên nếu có lỗi xảy ra, đó phải là compile time error. Cậu đã build và deploy thành công app lên localhost, có nghĩa là không có lỗi lombok khiến chương trình nhận được getter và setter.
  • MySQL thì liên quan gì tới Lombok à cậu? @@
  • Thông báo “Invalid property ‘id’ of bean class [com.example.demo.models.Book]: Bean property ‘id’ is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?” cậu gặp vấn đề ở bean class. Vấn đề đây không phải lỗi của Lombok, mà là lỗi thông báo từ Spring (lombok không quan tâm tới bean class), và là lỗi runtime.
    Cậu phải đọc log và hiểu nó, chứ đừng đoán mò. Tớ cá phần còn lại cậu sẽ có stacktrace và tên exception, và cậu phải đọc cả stacktrace và tên của exception để hiểu vấn đề.
  • Trong POM cậu exclude xừ nó lombok rồi còn đâu!!! :expressionless:
  • Thông báo có sẵn là thế nào cậu? Cậu có chứng minh được không? :expressionless:

Cậu làm ơn:

  • Mô tả rõ ràng cậu gặp vấn đề gì lại một lần nữa. Tất cả những gì cậu đưa ra đều có vẻ không đáng tin cậy (tớ không chắc cậu dùng MySQL đâu).
    Cậu gặp lỗi gì? Thông điệp lỗi và log lỗi có không? Lỗi đó xảy ra khi cậu làm gì? Cậu có code liên quan tới phần lỗi đó không? Cậu đã thử search thông điệp lỗi chưa?
  • Cung cấp cho bọn tớ thêm thông tin về log lỗi và các screenshot về quá trình cậu gặp lỗi. Hiện giờ tớ thấy cậu đang sửa bung bét lên và quy tất cả các thông điệp lỗi thành vấn đề của lombok.
  • Đừng đưa cho bọn tớ thông tin nào gây nhiễu!

Đây là cách mà tớ kỳ vọng cậu sẽ dùng để mô tả cho vấn đề của cậu:

Tớ cá là link trên có thể giúp cậu luôn được :slight_smile:

3 Likes

Mình đã nói lúc đầu là khi mình chạy chương trình thì nó thông báo không nhận được getter/setter của lombok nên mình đã thay thế bằng thủ công và chạy thành công. Mình xin lỗi vì đã không up đủ thông tin, mình sẽ lưu ý đều này.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?