猿问

强制 Twilio 语音回调到 JSON 以促进 Spring 中的反序列化

我正在使用 Java SDK 使用类似于


Call.creator(to, from, callbackAddress)

我提供了一个 URL ( callbackAddress),一旦呼叫连接,它将接收回调。有什么方法可以将此回调配置为 JSON 而不是"application/x-www-form-urlencoded; charset=UTF-8"?


我尝试这样做的原因是因为我正在使用 Spring,最终我试图在我的 RestController 中的反序列化 Pojo 中接收请求参数(body下面示例中的参数),这是 SpringMVC 中的标准。使用 jackson 更容易做到这一点,它需要一个 JSON 请求正文


作为第二个问题,Twilio SDK 中是否有一个类已经封装了请求中的所有参数,或者我必须创建这样的类?


这是一个虚拟休息控制器来说明我正在尝试做什么。请注意,“出城”错误的逻辑只是一个愚蠢的演示,用于说明为什么我需要访问请求参数。我找到的关于回调的所有示例总是忽略请求参数并返回静态 TwiML


@RestController

@RequestMapping(value = "/twilio", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)

public class TwilioCallbackController {

  @PostMapping

  public String handleCallback(RequestBody body /*this arg should have all request params*/) {

     log.info("received callback for callId {}", body.getCallSid()) 

     if (!body.toCity().equals("my-city")) {

        throw new Exception("outside of city");

     }

     return createTwiML(body);

  }

}


慕桂英4014372
浏览 113回答 1
1回答

噜噜哒

Twilio 开发者传播者在这里。无法让 Twilio 以 JSON 格式向您发送 webhook,它将作为表单编码参数发送。但是,让 Spring 解析它们应该没有问题。您可以通过为每个参数创建一个具有 getter 和 setter 的类来创建一个将参数解析到其中的类。因此,例如,您可以创建以下类:public class TwilioWebhook {  private String CallSid;  private String From;  public String getCallSid() {    return CallSid;  }  public void setText(String CallSid) {    this.CallSid = CallSid;  }}然后您可以使用它从传入的 webhook 参数中解析 CallSid,例如:@RestController@RequestMapping(value = "/twilio", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)public class TwilioCallbackController {  @PostMapping  public String handleCallback(TwilioWebhook request) {     log.info("received callback for callId {}", request.getCallSid())      // rest of the controller.  }}您可以通过添加到类来解析所有参数TwilioWebhook。您可以在Twilio 语音请求文档中看到 Twilio 将发送的所有参数。不过,Twilio SDK 中没有一个类可以为您执行此操作。
随时随地看视频慕课网APP

相关分类

Java
我要回答