首页 > 解决方案 > 无法从 Restcontroller 返回页面

问题描述

我使用条纹作为支付网关。我只需要从作为休息控制器的 Webhook 控制器返回一个页面。我知道 Restcontroller 不应该返回视图,但除此之外看不到任何其他选项。现在我正在使用 ModelandView 接口返回一个视图,但无法做到这一点。所以请告诉我如何从restcontroller返回一个视图以及这段代码有什么问题。

@RestController
public class StripeWebhookController {

@Autowired
private FoodhubServiceImpl service;

@Autowired
private Payment payment;

private String endpointSecret="some endpointSecret";


@PostMapping("/foodhub/endpoint")
public ModelAndView handleStripeEvents(@RequestBody String payload, @RequestHeader("Stripe-Signature") String sigHeader, HttpServletRequest request) {
            

            if(sigHeader == null) {
                System.out.println("sigheader is null");
                return null;
            }
            
            Event event; 
            // Only verify the event if you have an endpoint secret defined.
            // Otherwise use the basic event deserialized with GSON.
            try {
                event = Webhook.constructEvent(
                    payload, sigHeader, endpointSecret
                );
            } catch (SignatureVerificationException e) {
                // Invalid signature
                System.out.println("Webhook error while validating signature.");
                System.out.println(e);
                return null;
            }
            
        // Deserialize the nested object inside the event
        EventDataObjectDeserializer dataObjectDeserializer = event.getDataObjectDeserializer();
        StripeObject stripeObject = null;
        if (dataObjectDeserializer.getObject().isPresent()) {
            stripeObject = dataObjectDeserializer.getObject().get();
        } else {
            // Deserialization failed, probably due to an API version mismatch.
            // Refer to the Javadoc documentation on `EventDataObjectDeserializer` for
            // instructions on how to handle this case, or return an error here.
        }
        // Handle the event
        switch (event.getType()) {
            case "payment_intent.succeeded":
                PaymentIntent paymentIntent = (PaymentIntent) stripeObject;
                System.out.println("Payment succeeded for   "+paymentIntent.getAmount());
                handlePaymentIntentSucceeded(paymentIntent);
                // Then define and call a method to handle the successful payment intent.
                break;
            default:
                System.out.println("Unhandled event type: " + event.getType());
                break;
        }
        
        ModelAndView mv = new ModelAndView();
        mv.setViewName("payment-success.jsp");
        return mv;
}

标签: springspring-mvcstripe-payments

解决方案


推荐阅读