帖子请求在邮递员中工作正常,但我无法使其与 Swift 4 和 Alamofire 一起使用



我正在开发一个Swift 4应用程序,它与使用JDBCCDB2数据库通信的JAVA DAO通信。 我正在使用JAX-RS来提供 Web 服务功能。我还使用Alamofire 4库作为应用程序的一部分。

当我使用 POST 请求调用 DAO 时,该请求在 Postman 中传递了一系列内容类型为 x-www-URLEncoding 的参数,调用成功完成,结果以 200 条消息传回,但是当我使用 Alamofire 请求在 Swift 4 中尝试时,JAVA DAO 在 DAO 的结果集上抛出错误。

错误

[玻璃鱼 4.1] [塞维尔] [] [应用.log] [TID: _ThreadID=31 _ThreadName=http-listener-1(4)] [timeMillis: 1517241179331] [levelValue: 1000] [[ 例外 : java.lang.NullPointerExceptioncom.sun.gjc.spi.base.ResultSetWrapper.next(ResultSetWrapper.java:103)

Java code
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)

public int insertUserProfile(
@FormParam("password") String password,         
@FormParam("fName") String fName,
@FormParam("city") String city,
@FormParam("stateProv") String stateProv,
@FormParam("zip") String zip,
@FormParam("emailId") String emailId,
@FormParam("age") short age,
@FormParam("sex") String sex,
@FormParam("uType") String uType,
@FormParam("salary") BigDecimal salary,
@FormParam("occupation") String occupation,
@FormParam("secQuestion") String secQuestion,
@FormParam("secAnswer") String secAnswer
) throws Exception{

try {
String proc = "CALL USERINFO(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
int whichquery = 1;
int cols = 1;

CallableStatement stmt = conn.prepareCall(proc);
stmt.setInt(1,whichquery);
stmt.setInt(2,0);
stmt.setString(3,password);
stmt.setString(4,fName);
stmt.setString(5,city);
stmt.setString(6,stateProv);
stmt.setString(7,zip);
stmt.setString(8,emailId);
stmt.setInt(9,age);
stmt.setString(10,sex);
stmt.setString(11,uType);
stmt.setBigDecimal(12,salary);
stmt.setString(13,occupation);
stmt.setString(14,secQuestion);
stmt.setString(15,secAnswer);
stmt.registerOutParameter(16,Types.VARCHAR, sqlState);
stmt.registerOutParameter(17,Types.INTEGER, sqlCode);
stmt.registerOutParameter(18,Types.VARCHAR, sqlMsg);
if (debug_sw) { System.out.println("***** setString *****"); }


rs = stmt.executeQuery();
if (debug_sw) { System.out.println("***** executeQuery *****"); }
if (debug_sw) { System.out.println("***** Initialized list *****"); }
if (sqlCode == 0 && rs.next() )
{
total_rows = rs.getMetaData().getColumnCount();
}

rs.close();
stmt.close();
conn.close();
if (debug_sw) { System.out.println("***** Closed rs, stmt, & conn *****"); }
if (debug_sw) { System.out.println("***** Returning JSONArray *****"); }
return total_rows;

雨燕4/阿拉莫火代码

let parameters: Parameters = [
"password":passW,
"fName":fname,
"city":cityname,
"stateProv":statename,
"zip": zipname,
"emailId": emailname,
"age": agename,
"sex": sexname,
"uType":userTypeName,
"salary":salaryAmount,
"occupation": occupationname,
"secQuestion": secretQuestion,
"secAnswer": secretAnswer
]
Alamofire.request(url, method:.post, 
parameters:parameter, encoding:URLEncoding.default)
.reponse{response in
print("The output is: ",response, request!.description)
}

邮递员代码

POST /dao/webapi/myprofile HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 7681b040-1a3bo-1k0k-21b8-c7993b32ab28
password=dusty962!&fName=george&city=glassfish&
stateProv=NJ&zip=09023&emailId=douglas%40test.com&
age=1960&sex=male&uType=U&salary=6&occupation=programmer
&secQuestion=married&secAnswer=twice  

您正在向请求方法传递参数而不是参数。这只是您提交问题中的拼写错误还是您有参数变量?我想Xcode会让你知道,如果你不这样做。

最新更新