我不知道这对youtube用户和我来说是如何工作的,即使在从github复制了他们的代码之后也是如此



我一直在自学Spring Boot,并开始学习联接和表关系。我一直在遵循YouTuber java技术人员在这个视频中的说明(SpringBoot:SpringDataJPA-https://youtu.be/8qhaDBCJh6I)。在视频的某一点上,他有

package com.javatechie.jpa.dto;
import com.javatechie.jpa.entity.Customer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class OrderRequest {
private Customer customer;
}

他后来称这类为


@RestController
public class OrderController {
@Autowired
private CustomerRepository customerRepository;
@Autowired
private ProductRepository productRepository;
@PostMapping("/placeOrder")
public Customer placeOrder(@RequestBody OrderRequest request){
return customerRepository.save(request.getCustomer());
}
}

我不知道为什么这对他有用。他调用getCustomer函数时从未在OrderRequest类中定义过该函数。但在他的视频中,他能够毫无问题地运行所有内容,将JSON文件发送到SQL表。事实上,当我尝试这样做的时候,即使是用他自己的GitHub代码(https://github.com/Java-Techie-jt/spring-data-jpa-one2many-join-example.git)eclipse告诉我不存在getCustomer函数,我不断地收到500错误,再次指出getCustomer函数不存在。

我做错了什么?它是使用Eclipse而不是Intelli-J吗?我无法理解为什么即使使用他自己的GitHub代码,它也不起作用。如有任何建议,我们将不胜感激。

因为Customer是您的类,所以您需要在OrderRequest类中实现一个方法GetCustomer。您可以使用Lombok或为每个属性创建手动获取和设置功能,因此:

package com.javatechie.jpa.dto;
import com.javatechie.jpa.entity.Customer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class OrderRequest {
private Customer customer;
public setCustomer(Customer customer){
this.customer = customer;
}
public getCustomer(){
return this.customer;
}
}

@datalombok将隐式创建所有:getter+setter+constructor等=>当他调用getCustomer()时应该没有错误,因为他用@data注释了类OrderRequest,所以getter和setter将被隐式创建。

以下是lombok官方网站对lombok 的评论

@Data是一个方便的快捷注释,它将@ToString、@EqualAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能捆绑在一起

因此,很明显,您在eclipse中安装lombok时遇到了问题。。我建议先删除lombok,然后自己创建setter、getter和构造函数。

我希望我帮助了

最新更新