有这样的课程:
用户.java:
@Entity
@Setter
@Getter
@NoArgsConstructor
public class User {
@Id
private int id;
private String username;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Address address;
public User(String username) {
this.username = username;
}
}
Run Code Online (Sandbox Code Playgroud)
地址.java:
@Entity
@Data
public class Address {
@Id
private int id;
private String country;
@OneToOne
private User user;
}
Run Code Online (Sandbox Code Playgroud)
用户存储库.java:
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
}
Run Code Online (Sandbox Code Playgroud)
演示应用程序.java:
@Bean
public CommandLineRunner loadData(UserRepository userRepo){
return new CommandLineRunner() {
@Override
public …Run Code Online (Sandbox Code Playgroud) 我的 Spring Boot 控制器有一个奇怪的错误,没有返回最近创建的对象。
我有一个控制器,有两种方法(见下文)。只需检索“OrderPay”类的对象并将其作为响应实体的有效负载返回即可。这工作正常,因此该对象没问题。
另一个创建并保留“OrderPay”的新实例,然后返回该新创建的对象。新对象的创建及其持久化工作正常。但是,当我尝试退货时,我收到以下错误消息。
现在,如果错误消息持续出现,我就能理解了。但是,当使用第一个函数(“getPaymentByIdTest”)返回这个新创建的对象时,它返回它没有问题,即使我以完全相同的方式从数据库检索它并以相同的方式返回它,具有相同的返回类型该方法的。
现在我知道在 HTTP-GET 方法中执行代码并不是最佳实践,但它更快、更方便测试。
谁能看到我需要在哪里调整代码?
2020-04-13 21:37:57.507 ERROR 26796 --- [nio-8081-exec-2] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中path[]抛出异常[请求处理失败;嵌套异常是 org.springframework.http.converter.HttpMessageConversionException: 类型定义错误: [简单类型, 类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; 嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 的序列化程序,并且没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链: com.brownbag_api.model.OrderPay["posSend"]->com.brownbag_api.model.Pos$HibernateProxy$7l7MDMEi["hibernateLazyInitializer"])] 其根本原因
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:找不到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 的序列化器,并且没有发现创建 BeanSerializer 的属性(为避免异常,请禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链: com.brownbag_api.model.OrderPay["posSend"]->com.brownbag_api.model.Pos$HibernateProxy$7l7MDMEi["hibernateLazyInitializer"])
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/api/pay")
public class PaymentController {
@Autowired
private OrderPayRepo orderPayRepo;
@Autowired
private OrderPaySvc orderPaySvc;
@GetMapping("/{id}")
public ResponseEntity<?> getPaymentByIdTest(@PathVariable Long id) {
Optional<OrderPay> orderPay = orderPayRepo.findById(id);
return ResponseEntity.ok(orderPay);
} …Run Code Online (Sandbox Code Playgroud)