如何在Android中使用retrofit进行POST请求

我正在做一个POST请求在Android中使用retrofit到我在Node.js.中创build的服务器。 我已经在GET请求工作,它工作正常,但是当我提出了一个职位要求,我无法获得数据。

我的代码如下: DataService.java

public class DataService extends Service{ private final class ServiceHandler extends Handler { public ServiceHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { try { computeDistance(startLocation); } catch (Exception e) { e.printStackTrace(); } stopSelf(msg.arg1); } public void computeDistance(String endLocation){ RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Constants.Http.URL_BASE) .setLogLevel(RestAdapter.LogLevel.FULL) .build(); ApiService cityService = restAdapter.create(ApiService.class); cityService.updateCityData(); } } } 

我定义了如下界面:
ApiService.java

 public interface ApiService { @POST("/city/update") public String updateCityData(); } 

我的Node.js文件是这样的:

 function updateDBData(req, res, next) { console.log('Entered into the UpdateDBDATa'); var sapi = {"data": "false"}; res.send(200, sapi).end(); } /**-------- creating a server --------**/ var server = restify.createServer({name: 'crunchbase'}); server.get('/city/:name', updateDBData); /**------- server listening port -------**/ server.listen(appContext.port, function () { console.log('%s listening at %s', server.name, server.url); }); 

当我用http://www.api.com:8084/search/update调用Node.js服务器时,我得到了控制台上打印的信息。 但是,当我通过android进行改造请求,我得到的错误

  D/Retrofit﹕ <--- HTTP 405 http://www.api.com:8084/city/update (439ms)<br> D/Retrofit﹕ : HTTP/1.1 405 Method Not Allowed<br> D/Retrofit﹕ Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5 , Content-Type, Date, X-Api-Version<br> D/Retrofit﹕ Access-Control-Allow-Methods: GET<br> D/Retrofit﹕ Access-Control-Allow-Origin: *<br> D/Retrofit﹕ {"code":"BadMethod","message":"/city/update does not support POST"} D/Retrofit﹕ <--- END HTTP (67-byte body) 

我无法弄清楚什么是错误以及如何解决这个错误。

看起来问题是在服务器端(你不支持发布请求)。

试着用类似的东西来支持它

 server.post('/city/:name', updateDBData); 

之前

 server.listen