spring 如果当前请求不是异步模式,则调用此方法是非法的

yftpprvb  于 2022-10-30  发布在  Spring
关注(0)|答案(1)|浏览(289)

发生的错误:

{
  "status" : 1,
  "code" : 0,
  "message" : "It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)",
  "param" : null,
  "data" : null
}

与错误发生相关的代码:

@RestController
@RequestMapping(value = "/cashier/v1")
public class PayController {
    @ApiOperation("pay for shop")
    @GetMapping(value = "/pay")
    public ResponseVO<PayResponseVO> pay(ShopPayRequestVO requestVO, HttpServletRequest request) {
        return payService.pay(requestVO, request);
    }
}

@Service
@Slf4j
public class PayServiceImpl implements IPayService {
    @Override
    public ResponseVO<PayResponseVO> pay(ShopPayRequestVO requestVO, HttpServletRequest request) throws AuthorizationException {
        log.info("pay request param:{}", JSON.toJSONString(requestVO));
        PayResponseVO vo = new PayResponseVO();
        ......
        vo.setOrderNo(businessOrderNo);
        vo.setShopId(requestVO.getShopId());
        log.info("pay response param:{}", JSON.toJSONString(vo));
        return ResponseVO.success(vo);
    }
}

@Data
public class PayResponseVO {

    private Object payInfo;

    private String orderNo;

    private String shopId;
}

单步调试所有代码都能正常执行,但前端还是有错误,我遇到了这个错误,但网上没有合适的解决方案,我自己解决了,下面分享解决方案

7ajki6be

7ajki6be1#

我的项目中解决这个问题的办法:
PayResponseVO. Java类需要实现可序列化接口

@Data
public class PayResponseVO implements Serializable {

    private static final long serialVersionUID = -7991519952738359328L;

    private Object payInfo;

    private String orderNo;

    private String shopId;
}

相关问题