要注意::当我在显示代码的位置看到
postmapping-url-here
和MyOwnDefinedEntity
时,仅表示我不打算过多透露信息。
因此,我正在使用Twilio
发送和接收短信。我已经在这个问题上停留了大约3天了,但是我似乎无法找出解决方法。
我使用Spring Boot
作为应用程序框架,使用Gradle
作为构建工具,使用VSCode
作为IDE。我还使用Ngrok
创建了一个隧道,供localhost:8080
运行。
当我以a:身份运行时
public static void main(String[] args) {
}
它工作得很好,我的Twilio
号也发回了短信。
但是,当我将其放在其自己的函数中,调用该函数,并在整个应用程序中运行它时,从200
用作{{1} }方法,但我的main
号码没有给我发短信。
我已经尝试使用Twilio
和@PostMapping
,因为我已经尝试同时测试@GetMapping
和POST
。
在GET
网站的发送和接收代码中,我尝试使用Twilio
和application/xml
作为响应类型。
这是到目前为止我拥有的一些代码:
application/json
这是public static void TwilioRespondToSMS() {
get("/", (req, res) -> "");
post("/<postmapping-url-here>", (req, res) -> {
res.type("application/xml");
Body body = new Body
.Builder("This is a response to your text message")
.build();
Message sms = new Message
.Builder()
.body(body)
.build();
MessagingResponse twiml = new MessagingResponse
.Builder()
.message(sms)
.build();
return twiml.toXml();
});
}
代码:
main
我也尝试过将函数放入:
@SpringBootApplication
public class ApplicationServerClass {
public static void main(String[] args) {
SpringApplication.run(ApplicationServerClass.class, args);
//TwilioRespondToSMS();
}
// Whatever other code ...
}
这是@Bean
public CommandLineRunner commandRunner() {
return (args) -> {
TwilioRespondToSMS();
// Whatever other code ...
}
}
函数:
@PostMapping
Twilio网站上的示例将其显示为@CrossOrigin(origins = "http://localhost:4200")
@PostMapping("/<postmapping-url-here>")
public ResponseEntity<MyOwnDefinedEntity> getMyOwnDefinedEntity(@PathVariable Long id) {
log.debug("REST request to get MyOwnDefinedEntity : {}", id);
Optional<MyOwnDefinedEntity> myOwnDefinedEntity = myOwnDefinedEntityRepository.findById(id);
//if(myOwnDefinedEntity.isPresent())
return new ResponseEntity<MyOwnDefinedEntity>(MyOwnDefinedEntity.get(), HttpStatus.OK);
}
函数。在整个应用程序中运行该示例时,我需要对该示例进行任何更改吗?
谢谢。
答案 0 :(得分:0)
好的,经过4天的尝试解决我的问题,我终于能够自己提出解决方案。
我认为这可能只是一个愚蠢的错误,直到现在我还没有发现,但是我觉得这种解决方案并非易事。因此,我将分享我的想法。
在将我的post
函数中的URL映射到自定义@PostMapping
方法之前,我实际上正在获取状态代码为404
,因为它无法识别任何POST
请求要映射的网址。
我认为正确的解决方案是使用定制的@PostMapping
,但这只是导致我的Java Spark
使用相同的端口:8080
与我的{{1 }}应用程序正在运行。这就是为什么即使我收到的状态代码为Spring Boot
,也没有从Twilio号码收到任何文本的原因。
因此,我改正了此问题以解决问题:
首先,我删除了自定义的
200
函数
@PostMapping
我将函数保留在以下位置:
@PostMapping("/<postmapping-url-here>")
public ResponseEntity<MyOwnDefinedEntity> getMyOwnDefinedEntity(@PathVariable Long id) {
log.debug("REST request to get MyOwnDefinedEntity : {}", id);
Optional<MyOwnDefinedEntity> myOwnDefinedEntity = myOwnDefinedEntityRepository.findById(id);
//if(myOwnDefinedEntity.isPresent())
return new ResponseEntity<MyOwnDefinedEntity>(MyOwnDefinedEntity.get(), HttpStatus.OK);
}
最后,在我的@Bean
public CommandLineRunner commandRunner() {
return (args) -> {
TwilioRespondToSMS();
// Whatever other code ...
}
}
内,添加了TwilioRespondToSMS()
或任何其他非port(8070);
的端口号。
在这种情况下,8080
现在通过Java Spark
隧道URL使用8070
,而Ngrok
使用Spring Boot
。至此,我终于可以同时运行8080
的同时从我的Twilio
号码中成功获得一条回复短信。