【问题标题】:Unrecognized token 'Payment': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')无法识别的令牌“付款”:期待(JSON 字符串、数字、数组、对象或令牌“空”、“真”或“假”)
【发布时间】:2021-12-31 21:43:54
【问题描述】:

我正在使用 H2 数据库开发两个 Spring Boot 微服务(订单和支付)不在订单服务中,我收到上述错误:

这是我的代码

服务

public TransactionResponse saveOrder(TransactionRequest request) {
    String responseMessage = "";
    Order order = request.getOrder();
    Payment payment = request.getPayment();
    payment.setOrderId(order.getId());
    payment.setAmount(order.getPrice());
    // response message
    System.out.println(order);
    // rest api call to payment service
    Payment paymentResponse =
           restTemplate.postForObject("http://localhost:8082/api/payment", payment, Payment.class);

    responseMessage = paymentResponse.getPaymentStatus().equals("success")?
           "payment processed successfully": "payment failed ";
    orderRepository.save(order);
    System.out.println(paymentResponse);

    return new TransactionResponse(order , paymentResponse.getTransactionId() , paymentResponse.getAmount(), responseMessage);
}

控制器

@PostMapping
public TransactionResponse bookOrder(@RequestBody TransactionRequest transactionRequest) {
    return orderService.saveOrder(transactionRequest);
}

事务请求模型

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransactionRequest  {
  private Order order;
  private Payment payment;
}

支付模式

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment {
    private int paymentId;
    private String paymentStatus;
    private String transactionId;
    private double amount;
    private int orderId;
}

图片

【问题讨论】:

  • 您的请求应该是对象数组吗? [..] 而不是 {..} ?
  • 分享您的 TransactionRequest 模型代码
  • 您能否在您的问题中添加Payment 代码?此外,邮递员显示http://localhost:8082/api/order 和您的代码http://localhost:8082/api/payment。请澄清你的问题。谢谢!
  • @mystery 我已将 transactionRequest 模型添加到问题中
  • @JoãoDias 让我澄清一下这里的端点,订单服务在端口:8081 上运行,localhost:8081/api/order 是负责预订订单的主要 api,然后它调用支付 api,即在端口上运行:8082,localhost:8082/api/payment 注意:我已将付款代码添加到问题中

标签: java spring jackson postman h2


【解决方案1】:

哦,我遇到了问题,因为我正在对支付服务进行 rest api 调用,支付服务的 post 方法返回的是字符串而不是 Payment 对象。

这是我之前的后付款方式:

@PostMapping
public String orderPayment(@RequestBody Payment payment) {
   paymentService.doPayment(payment);
   return "Payment done";
}

应该是这样的

@PostMapping
public Payment orderPayment(@RequestBody Payment payment) {
   return paymentService.doPayment(payment);
}

注意:返回类型

【讨论】:

  • 现在您明白为什么将所有相关代码添加到您的问题中如此重要;)
  • @JoãoDias 是的,谢谢你的帮助
  • 考虑接受您自己的答案,以便您的问题可以“关闭”;)谢谢!
  • 它给了我 20 小时的时间来接受它,我一定会这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2018-08-04
  • 2016-10-02
相关资源
最近更新 更多