У меня странная ошибка с контроллером весенней загрузки, не возвращающим недавно созданный объект.
У меня есть контроллер с двумя способами (см. Ниже). Один просто извлекает объект класса «OrderPay» и возвращает его в качестве полезной нагрузки объекта ответа. Это работает нормально, поэтому объект в порядке.
Другой создает и сохраняет новый экземпляр «OrderPay», а затем должен вернуть этот вновь созданный объект. Создание нового объекта и его постоянство работают нормально. Однако, когда я пытаюсь вернуть его, я получаю сообщение об ошибке ниже.
Теперь я понял бы это сообщение об ошибке, если бы оно происходило последовательно. Однако при возврате этого вновь созданного объекта с использованием первой функции («getPaymentByIdTest») он возвращает его без проблем, хотя я точно так же извлекаю его из базы данных и возвращаю таким же образом, с тем же типом возврата метода.
Теперь я знаю, что выполнение кода в методе HTTP-GET не является наилучшей практикой, однако это быстрее и удобнее для тестирования.
Может кто-нибудь увидеть, где мне нужно настроить код?
2020-04-13 21: 37: 57.507 ОШИБКА 26796 --- [nio-8081-exe c -2] oa c. c. C. [. [. [/]. [DispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.http.converter.HttpMessageConversionException: ошибка определения типа: [простой тип, класс org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; вложенное исключение: com.faster xml .jackson.databind.ex c .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 ["hibernate *azyInitial4454") 1015 * com.faster xml .jackson.databind.ex c .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"])
1018
@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);
}
@GetMapping("/exec/from/{from}/to/{to}/amount/{amount}")
public ResponseEntity<?> execPayment(@PathVariable Long from, @PathVariable Long to, @PathVariable double amount) {
Pos posFrom = posRepo.getOne(from);
Pos posTo = posRepo.getOne(to);
OrderPay pay = orderPaySvc.createPay(amount, posFrom, posTo);
pay = orderPaySvc.execPay(pay);
if (pay == null) {
return ResponseEntity.ok("Payment could not be executed. Please see log for more details!");
} else {
System.err.println("Payment executed: " + pay.getPosRcv().getParty().getName());
Long payId = pay.getId();
System.err.println("Payment executed: " + payId);
// payId returns the expected value here, the object is therefore saved in the database (verified).
Optional<OrderPay> orderPay = orderPayRepo.findById(payId);
return ResponseEntity.ok(pay);
}
}
}
Заказ. java
@Entity
@Table(name = "order_base")
@Inheritance(strategy = InheritanceType.JOINED)
public class Order implements Serializable {
private static final long serialVersionUID = -3458221490393509305L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@NotNull
@Column(name = "QTY")
private double qty;
public Order() {
}
public Order(@NotNull double qty) {
super();
this.qty = qty;
}
}
OrderPay
@Entity
@Table(name = "order_pay")
public class OrderPay extends Order implements Serializable {
private static final long serialVersionUID = 4643589803146964779L;
@NotNull
@OneToOne(targetEntity = Pos.class)
@JoinColumn(name = "POS_SEND_ID")
private Pos posSend;
@NotNull
@OneToOne(targetEntity = Pos.class)
@JoinColumn(name = "POS_RCV_ID")
private Pos posRcv;
public OrderPay() {
super();
}
public OrderPay(@NotNull double qty, @NotNull Pos posSend, @NotNull Pos posRcv) {
super(qty);
this.posSend = posSend;
this.posRcv = posRcv;
}
}
Поз. java
@Entity
@Table(name = "POS")
public class Pos implements Serializable {
private static final long serialVersionUID = 1530699992135610397L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@NotNull
@Column(name = "QTY")
private double qty;
@NotNull
@ManyToOne(targetEntity = Party.class)
@JoinColumn(name = "PARTY_ID")
@JsonBackReference
private Party party;
public Pos() {
}
public Pos(@NotNull double qty, @NotNull Party owner) {
super();
this.qty = qty;
this.party = owner;
}
}
JSON
{
"id":7,
"qty":33000.0,
"posSend":
{
"id":1,
"qty":-266010.0,
"hibernateLazyInitializer":{}
},
"posRcv":
{
"id":2,
"qty":66000.0,
"hibernateLazyInitializer":{}
}
}