我正在使用Grails上的Web应用程序,我使用Clickatell作为Web API。 我在SMSNotifier.groovy类上有这些代码。 然而,我遇到了MissingPropertyException
groovy.lang.MissingPropertyException:没有这样的属性:类的POST:utils.SMSNotifier at utils.SMSNotifier.sendClickatellSms(SMSNotifier.groovy:54)
SMSNotifier类中包含错误的代码如下:
def sendClickatellSms(def number, def text)
{
def http = new HTTPBuilder('http://api.clickatell.com/')
http.contentType = TEXT
EncoderRegistry encoders = new EncoderRegistry();
encoders.setCharset('ISO-8859-1') http.setEncoderRegistry(encoders)
http.request( POST )
{
uri.path = 'http://sendmsg'
requestContentType = URLENC
if (number.substring(0, 1) == '+')
{
// Remove a leading plus sign number = number.substring(1)
}
body = [ api_id: '3442677', user: 'iTech013', password: '', from: '+639277705918', to: number, text: text, concat: '3', callback: '2', deliv_ack: '1' ]
response.success = { resp, reader -> def msg = reader.text if (msg.substring(0, 2) == 'ID') { return 0 } else if (msg.substring(0, 3) == 'ERR') { log.error("Clickatell " + msg) return msg.substring(5, .toInteger() } else { return 1 }
} response.failure = { resp -> log.error("Failed to contact Clickatell: ${resp.statusLine}") return 1 } } }
SMSNotifier.groovy文件:
package utils
import org.itech.klinikav2.domain.Patient import org.itech.klinikav2.enums.NotificationType;
import groovyx.net.http.EncoderRegistry
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.TEXT import grails.persistence.Event
/** * @author Randy * */
class SMSNotifier
{
//this method is to send a message with a patient parameter and message
public static String chooseMessage(NotificationType notifType, Patient patient)
{
def message= "Greetings! You will have a follow-up appointment tomorrow." def doctor= "Doctor: " def time= "Time: "
def p=patient
if (notifType.equals(NotificationType.FOLLOW_UP_APPOINTMENT))
{
message= "Greetings! You will have a follow-up appointment tomorrow."
return message }
else if (notifType.equals(NotificationType.BALANCE))
{
message= "Greetings! Just reminding you of your balance for appointment payment."
return message }
}
def sendToList(ArrayList<Patient> patients, NotificationType notifType)
{
def patientList= patients for (int i=0; i< patientList.size(); i++)
{ def patient = patientList.get(i)
def message = chooseMessage(notifType, patient)
sendClickatellSms(patient.mobileNumber, message) }
}
def sendClickatellSms(def number, def text)
{
def http = new HTTPBuilder('http://api.clickatell.com/')
http.contentType = TEXT EncoderRegistry encoders = new EncoderRegistry();
encoders.setCharset('ISO-8859-1') http.setEncoderRegistry(encoders)
http.request(POST)
{
uri.path = 'http://sendmsg'
requestContentType = URLENC
if (number.substring(0, 1) == '+')
{ // Remove a leading plus sign
number = number.substring(1)
}
body = [ api_id: '3442677', user: 'iTech013', password: 'ingenium123..', from: '+639277705918', to: number, text: text, concat: '3', callback: '2', deliv_ack: '1' ]
response.success =
{ resp, reader -> def msg = reader.text if (msg.substring(0, 2) == 'ID') { return 0 }
else if (msg.substring(0, 3) == 'ERR')
{
log.error("Clickatell " + msg)
return msg.substring(5, .toInteger() }
else { return 1 }
}
response.failure = { resp -> log.error("Failed to contact Clickatell: ${resp.statusLine}") return 1 } } }
}
我通过Controller类的index()方法调用了此方法。这些是代码:
def index()
{
def sms = new SMSNotifier()
def result= sms.sendClickatellSms("09277705918", "Hi!")
if(result==1) { render "success" }
else{ render "sorry" }
}
我将密码空间留空,但我将实际密码放在我的实际代码上。
我认为答案很简单,我只是从API开始,所以,对此事的每一点知识和帮助都非常感谢! 先感谢您! :)
答案 0 :(得分:2)
import static groovyx.net.http.Method.*
POST
缺少导入。