当我尝试获取先前插入数据库的更新数据时,我在代码中遇到了一些问题。邮递员的错误代码:
“JSON解析错误:无法从START_OBJECT标记中反序列化java.lang.Integer的实例;嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.Integer的实例\ n在[来源:java.io.PushbackInputStream@647f9992;第1行,第1栏]:“
我有两个名为Payment and Order的实体,其中Payment将Orders保存为@OnetoOne实体。 付款类:
@Entity
@Table(name = "tbl_payment")
public class Payment {
@Id
@GeneratedValue
@Column(name = "payment_id")
Integer id;
@OneToOne(cascade=CascadeType.ALL)
private Order order;
@Column(name = "payment_receivable")
private double receivable;
@Column(name = "payment_outstanding")
private double outstanding;
@Column(name = "payment_status")
private String status;
public Payment(Order order, double receivable, double outstanding, String status) {
this.order = order;
this.receivable = receivable;
this.outstanding = outstanding;
this.status = status;
}
public Payment() {
}
@Override
public String toString() {
return "Payment{" +
"id=" + id +
", order=" + order +
", receivable=" + receivable +
", outstanding=" + outstanding +
", status='" + status + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public double getReceivable() {
return receivable;
}
public void setReceivable(double receivable) {
this.receivable = receivable;
}
public double getOutstanding() {
return outstanding;
}
public void setOutstanding(double outstanding) {
this.outstanding = outstanding;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
订单类:
@Entity
@Table(name = "tbl_order")
public class Order {
@Id
@GeneratedValue
@Column(name = "order_id")
Integer id;
@Column(name = "order_amount")
int amount;
@Column(name = "sale_id")
String sale_id;
public Order(int amount, String sale_id) {
this.amount = amount;
this.sale_id = sale_id;
}
public Order() {
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", amount=" + amount +
", sale_id='" + sale_id + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public String getSale_id() {
return sale_id;
}
public void setSale_id(String sale_id) {
this.sale_id = sale_id;
}
}
在我的控制器中,我将传递payment_id并使用它将付款条目从UNPAID更新为PAID状态。这是我得到上述错误的地方。
服务代码段:
@Transactional
@Modifying
public Payment clearPaymentStatus(Integer p){
TypedQuery query = em.createQuery("update Payment p set p.payment_status = ?1 where p.id = ?5", Payment.class);
query.setParameter(1, "PAID");
query.setParameter(5, new Integer(p));
return ((Payment) query.getSingleResult());
}
更新:控制器代码段
@RequestMapping("/clearpayment")
public @ResponseBody ResponseEntity<Payment> ClearPayment(@RequestBody Integer payment_id){
return new ResponseEntity<Payment>( paymentService.clearPaymentStatus(payment_id), HttpStatus.ACCEPTED);
}
添加工作正常邮递员,只有更新有问题。任何建议都会很棒。谢谢!
答案 0 :(得分:1)
JPA与JSON无关。 JSON只是一种输入格式。你有可能试图通过某种控制器提供一些json对象。 此控制器隐式尝试为您转换对象,但未能这样做。通常,它发生的原因是JSON格式无效,或者至少无法映射到对象层次结构。因此,请仔细检查您的JSON并尝试查看它应如何映射。
现在,很难从您发布的数据中得到更多信息,但很明显您在引擎希望看到整数的位置提供了一个对象(方括号中的内容)。这是内部的一些关系映射。
因此,正如我们的同事已经说过的那样,恰好在序列化期间失败的对象(稍后在流内部)应该传递给JPA引擎进行数据库操作,但这个特殊问题与JPA无关