“我正在实现一种注册机制,其中我的字段中有一个电话号码属性。如何向用户在使用 Twilio 注册期间输入的该电话号码发送消息?”
这用于在成功创建帐户后向用户发送 Twilio SMS 通知。下面是我的代码的实现方式。
private static final String ACCOUNT_SID = "ACd176f3083e1333d14939fe6f27d90a99";
private static final String AUTH_ID = "4e3327cb4efbe3ecd8e893d809533763";
public void sendSMS() {
try {
User user = new User();
Twilio.init(ACCOUNT_SID, AUTH_ID);
Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
"Your account has been created succesfuly.").create();
}
catch (TwilioException e) {
System.out.println("An error occured from twillio."+e.getMessage());
}
}
@PostMapping(value="/registerUser")
public ModelAndView registerUser(@Valid User user, BindingResult bindingResult, ModelAndView modelAndView){
//skipped other is statements for checking possible errors.
else{
//set a user to disabled by default before activation thru email.
user.setEnabled(false);
//save a user in the database.
userService.save(user);
//generating the confirmation token
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenRepository.save(confirmationToken);
//sending the email message
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(user.getEmail());
simpleMailMessage.setSubject("Complete your registrations");
simpleMailMessage.setFrom("[email protected]");
simpleMailMessage.setText("To activate your account, please click here : "
+"http://localhost:8080/activate- account?token="+confirmationToken.getConfirmationToken());
emailSenderService.sendEmail(simpleMailMessage);
modelAndView.addObject("Email ", user.getEmail());
//send also an sms message using Twilio.
sendSMS();
modelAndView.setViewName("successfulRegistration");
}
return modelAndView;
}
用户输入电话号码的 Thymeleaf 段。
<form action="#" th:action="@{/registerUser}" th:object="${user}" method="post" >
<div class="form-group">
<label th:for="phoneNumber">Phone Number: </label>
<input class="form-control" th:field="*{phoneNumber}" />
<br>
<label th:for="phoneNumber" th:if="${#fields.hasErrors('email')}" th:errors="*{phoneNumber}" required="required"
class="btn btn-danger">
</label>
</div>
</form>
我希望系统获取电话号码并将其设置为 Twilio TophoneNumber。但是,我遇到了这个错误:
twillio 发生错误。需要“收件人”电话号码。
User user = new User();
Twilio.init(ACCOUNT_SID, AUTH_ID);
Message.creator(new PhoneNumber(user.getPhoneNumber())
用户对象的phoneNumber为空,因为您从未在代码中的任何位置设置它。 所以你在这里得到空指针异常
user.getPhoneNumber()
如果你这样写:
User user = new User();
user.setPhoneNumber("+12541254122");
Twilio.init(ACCOUNT_SID, AUTH_ID);
Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
"Your account has been created succesfuly.").create();
那么它应该可以正常工作而不会出现空指针异常
下面的代码可以工作。
public void sendSMS(User user) {
try {
Twilio.init(ACCOUNT_SID, AUTH_ID);
Message.creator(new PhoneNumber(user.getPhoneNumber()), new PhoneNumber("+12029151841"),
"Your account has been created succesfuly.").create();
}
catch (TwilioException e) {
System.out.println("An error occured from twillio."+e.getMessage());
}
}
@PostMapping(value="/registerUser")
public ModelAndView registerUser(@Valid User user, BindingResult bindingResult, ModelAndView modelAndView){
//skipped other is statements for checking possible errors.
else{
//set a user to disabled by default before activation thru email.
user.setEnabled(false);
//save a user in the database.
userService.save(user);
//generating the confirmation token
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenRepository.save(confirmationToken);
//sending the email message
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(user.getEmail());
simpleMailMessage.setSubject("Complete your registrations");
simpleMailMessage.setFrom("[email protected]");
simpleMailMessage.setText("To activate your account, please click here : "
+"http://localhost:8080/activate- account?token="+confirmationToken.getConfirmationToken());
emailSenderService.sendEmail(simpleMailMessage);
modelAndView.addObject("Email ", user.getEmail());
//send also an sms message using Twilio.
sendSMS(user);
modelAndView.setViewName("successfulRegistration");
}
return modelAndView;
}