我问过类似的问题,但答案并没有帮助我。我正在尝试从我的Android应用程序调用休息服务。其余服务看起来像这样:
process.env['PATH'] = process.env['PATH'] + ':/tmp/:' + process.env['LAMBDA_TASK_ROOT'];
var options = { phantomPath: '/tmp/phantomjs' };
require('child_process').exec(
'cp /var/task/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs /tmp/.; chmod 755 /tmp/phantomjs;',
function (error, stdout, stderr) {
if (error) {
//handle error
console.log(error);
} else {
pdf.create(html, options).toBuffer(function (err, buffer) {
if (err) return console.log(err);
const s3PutParams = {
Bucket: 'my-bucket',
Key: Date.now().toString() + '.pdf',
Body: buffer,
ContentType: 'application/pdf',
};
s3.putObject(s3PutParams, function (error, data) {
if (error) {
console.error('s3:putObject failed!');
callback(error);
return;
}
callback(null, {statusCode: 200, body: JSON.stringify('Success')});
});
});
}
}
);
我启动我的REST服务,然后尝试从我的android应用中调用它,如下所示:
@RestController
@RequestMapping("/login")
public class LoginController {
@ResponseBody
@RequestMapping(value = "/user", method = RequestMethod.GET)
public boolean getUser(@RequestParam(value = "name", required = true) String userName, @RequestParam(value = "password", required = true) String password) {
if (userName.equals("MMM") && password.equals("mmm")) {
return true;
} else {
return false;
}
}
}
我收到的状态码为0。 当我使用API测试REST服务时,就可以了。我没有任何错误。我在同一网络上,并且防火墙已关闭。
答案 0 :(得分:0)
要了解问题所在,您需要使用onFailure方法调查“错误”对象
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.i("ws", "---->>onFailure : " + error);
}
});
建议:
1)不要在GET中发送密码!
密码不得包含在网址中,请使用POST并在请求正文中发送密码
2)您的android代码看起来不错,但是它存在一个本机框架来调用名为“ VOLLEY”的REST服务。 排球有以下好处:
代码并不比您的复杂...
示例:
String url = "http://my-json-feed";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mTextView.setText("Response: " + response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
}
});
答案 1 :(得分:0)
我可以看到您在这里做了一些“坏习惯”。
问题1
我可以看到您的Spring Controller想要使用用户名和密码作为URL参数。这不是服务器可能会记录URL /端点请求,该请求现在将以纯文本形式包含您的凭据。
修复选项
问题2
未按预期使用框架
我建议使用Spring Security。从长远来看,它将使您的东西更加安全,值得您去做。它将为您处理身份验证,角色和密码哈希。