草庐IT

java - Retrofit+OkHttp 在发送 GET 请求时可以,但在发送 POST 时给出 SocketTimetout

coder 2023-12-24 原文

我从 Retrofit 开始,我可以成功执行 GET 请求,但是当我尝试执行 POST 或 PUT 请求时,出现 SocketTimeOut 异常。

我根据 this question 将 OkHttp 添加到我的 libs 文件夹中但这并没有解决问题。

接口(interface)定义如下:

public interface MyService {
    @GET("/orders.json")
    void listOrders( Callback<List<Order>> callback );

    @GET("/forms.json")
    void listForms( Callback<List<Form>> callback );

    @POST("/orders/{id}.json")
    void saveOrder( @Path("id") int orderId, @Body Order order, Callback<Order> callback );
}

这就是我执行 POST 请求的方式:

private RestAdapter restAdapter;
private MyService webservice;

restAdapter = new RestAdapter.Builder()
  .setEndpoint(API_URL)
  .build();

webservice = restAdapter.create(MyService.class);

webservice.saveOrder( (int) _chamado.getId(), _chamado, new Callback<Order>() {

  @Override
  public void success(Order arg0, Response arg1) {
    Toast.makeText(MyActivity.this, "Request OK", Toast.LENGTH_SHORT).show();
  }

  @Override
  public void failure(RetrofitError arg0) {
    Toast.makeText(MyActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
  }
} );

执行 webservice.saveOrder(...) 后,我在服务器日志中没有看到任何请求(不过我看到了每个 GET 请求的日志)。 RetrofitError 的原因是 retrofit.RetrofitError: java.net.SocketTimeoutException

所有库都已更新(Retrofit 1.5.0 和 OkHttp 1.5.3),我使用的是运行 Android 4.4.2 的真实设备。

GitHub 上报告的问题不同,对于 POST 或 PUT 请求,此错误总是发生。

提前致谢!

编辑

启用 Retrofit FULL Log 后,我注意到在 PUT 请求之后,我无法再连接到服务器(即使是 GET 请求)。在下面的日志中可以看到一个成功的 GET 请求,接下来是一个“显然”成功的 PUT 请求(没有命中服务器——这个请求在服务器中根本没有日志),然后是另一个抛出的 PUT 请求连接异常。在那之后,即使是以前相同的 GET 请求也不会发送到服务器 - 并分派(dispatch)相同的异常。对此有什么想法吗?

04-11 18:00:41.291: D/Retrofit(16390): ---> HTTP GET http://10.0.0.104:3000/api/v1/orders.json
04-11 18:00:41.291: D/Retrofit(16390): ---> END HTTP (0-byte body)
04-11 18:00:42.008: D/Retrofit(16390): <--- HTTP 200 http://10.0.0.104:3000/api/v1/orders.json (716ms)
04-11 18:00:42.015: D/Retrofit(16390): : HTTP/1.1 200 OK 
04-11 18:00:42.015: D/Retrofit(16390): Cache-Control: max-age=0, private, must-revalidate
04-11 18:00:42.015: D/Retrofit(16390): Connection: Keep-Alive
04-11 18:00:42.015: D/Retrofit(16390): Content-Length: 404
04-11 18:00:42.015: D/Retrofit(16390): Content-Type: application/json; charset=utf-8
04-11 18:00:42.016: D/Retrofit(16390): Date: Fri, 11 Apr 2014 21:00:44 GMT
04-11 18:00:42.017: D/Retrofit(16390): Etag: "4acd7d8cacb097f6f5ffaddcd468dc06"
04-11 18:00:42.018: D/Retrofit(16390): OkHttp-Received-Millis: 1397250041960
04-11 18:00:42.018: D/Retrofit(16390): OkHttp-Response-Source: NETWORK 200
04-11 18:00:42.018: D/Retrofit(16390): OkHttp-Sent-Millis: 1397250041293
04-11 18:00:42.019: D/Retrofit(16390): Server: WEBrick/1.3.1 (Ruby/2.1.1/2014-02-24)
04-11 18:00:42.020: D/Retrofit(16390): Set-Cookie: request_method=GET; path=/
04-11 18:00:42.021: D/Retrofit(16390): X-Content-Type-Options: nosniff
04-11 18:00:42.022: D/Retrofit(16390): X-Frame-Options: SAMEORIGIN
04-11 18:00:42.023: D/Retrofit(16390): X-Request-Id: be381a81-210a-48d2-aeb0-cabb9b945818
04-11 18:00:42.023: D/Retrofit(16390): X-Runtime: 0.010391
04-11 18:00:42.023: D/Retrofit(16390): X-Ua-Compatible: chrome=1
04-11 18:00:42.024: D/Retrofit(16390): X-Xss-Protection: 1; mode=block
04-11 18:00:42.027: D/Retrofit(16390): [{"id":1,"date":"2014-01-01","place":"Av. Paulista, 2000","order_cod":"934","form_data":"{}","form_cod":"1","form_id":2,"created_at":null,"updated_at":"2014-04-11T13:53:31.000Z"},{"id":6,"date":"2016-07-06","place":"Rua Dom Gerardo, Centro, Rio de Janeiro","order_cod":"023984","form_data":"","form_cod":"1","form_id":null,"created_at":"2014-03-28T13:02:37.000Z","updated_at":"2014-03-28T13:02:37.000Z"}]
04-11 18:00:42.027: D/Retrofit(16390): <--- END HTTP (404-byte body)

04-11 18:00:51.278: D/Retrofit(16390): ---> HTTP PUT http://10.0.0.104:3000/api/v1/orders/1.json
04-11 18:00:51.278: D/Retrofit(16390): Content-Type: application/json; charset=UTF-8
04-11 18:00:51.279: D/Retrofit(16390): Content-Length: 104
04-11 18:00:51.280: D/Retrofit(16390): {"date":"2014-01-01","form_data":":)","place":"Av. Paulista, 2000","order_cod":"934","form_id":1,"id":1}
04-11 18:00:51.281: D/Retrofit(16390): ---> END HTTP (104-byte body)

04-11 18:01:54.371: D/Retrofit(16390): ---> HTTP PUT http://10.0.0.104:3000/api/v1/orders/1.json
04-11 18:01:54.371: D/Retrofit(16390): Content-Type: application/json; charset=UTF-8
04-11 18:01:54.371: D/Retrofit(16390): Content-Length: 104
04-11 18:01:54.372: D/Retrofit(16390): {"date":"2014-01-01","form_data":":)","place":"Av. Paulista, 2000","order_cod":"934","form_id":1,"id":1}
04-11 18:01:54.373: D/Retrofit(16390): ---> END HTTP (104-byte body)

04-11 18:01:57.370: D/Retrofit(16390): ---- ERROR http://10.0.0.104:3000/api/v1/orders/1.json
04-11 18:01:57.389: D/Retrofit(16390): java.net.ConnectException: failed to connect to /10.0.0.104 (port 3000) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:01:57.389: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:223)
04-11 18:01:57.389: D/Retrofit(16390):  at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
04-11 18:01:57.389: D/Retrofit(16390):  at libcore.io.IoBridge.connect(IoBridge.java:112)
04-11 18:01:57.389: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-11 18:01:57.389: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
04-11 18:01:57.389: D/Retrofit(16390):  at java.net.Socket.connect(Socket.java:833)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:248)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.Connection.connect(Connection.java:98)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:236)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:180)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:366)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:103)
04-11 18:01:57.389: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:205)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:66)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
04-11 18:01:57.389: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-11 18:01:57.389: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-11 18:01:57.389: D/Retrofit(16390):  at retrofit.Platform$Android$2$1.run(Platform.java:142)
04-11 18:01:57.389: D/Retrofit(16390):  at java.lang.Thread.run(Thread.java:841)
04-11 18:01:57.389: D/Retrofit(16390): Caused by: libcore.io.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:01:57.389: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:208)
04-11 18:01:57.389: D/Retrofit(16390):  ... 22 more
04-11 18:01:57.390: D/Retrofit(16390): ---- END ERROR

04-11 18:02:03.557: D/Retrofit(16390): ---> HTTP PUT http://10.0.0.104:3000/api/v1/orders/1.json
04-11 18:02:03.557: D/Retrofit(16390): Content-Type: application/json; charset=UTF-8
04-11 18:02:03.557: D/Retrofit(16390): Content-Length: 104
04-11 18:02:03.558: D/Retrofit(16390): {"date":"2014-01-01","form_data":":)","place":"Av. Paulista, 2000","order_cod":"934","form_id":1,"id":1}
04-11 18:02:03.558: D/Retrofit(16390): ---> END HTTP (104-byte body)

04-11 18:02:06.561: D/Retrofit(16390): ---- ERROR http://10.0.0.104:3000/api/v1/orders/1.json
04-11 18:02:06.576: D/Retrofit(16390): java.net.ConnectException: failed to connect to /10.0.0.104 (port 3000) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:02:06.576: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:223)
04-11 18:02:06.576: D/Retrofit(16390):  at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
04-11 18:02:06.576: D/Retrofit(16390):  at libcore.io.IoBridge.connect(IoBridge.java:112)
04-11 18:02:06.576: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-11 18:02:06.576: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
04-11 18:02:06.576: D/Retrofit(16390):  at java.net.Socket.connect(Socket.java:833)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:248)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.Connection.connect(Connection.java:98)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:236)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:180)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:366)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:103)
04-11 18:02:06.576: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:205)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:66)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
04-11 18:02:06.576: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-11 18:02:06.576: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-11 18:02:06.576: D/Retrofit(16390):  at retrofit.Platform$Android$2$1.run(Platform.java:142)
04-11 18:02:06.576: D/Retrofit(16390):  at java.lang.Thread.run(Thread.java:841)
04-11 18:02:06.576: D/Retrofit(16390): Caused by: libcore.io.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:02:06.576: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:208)
04-11 18:02:06.576: D/Retrofit(16390):  ... 22 more
04-11 18:02:06.576: D/Retrofit(16390): ---- END ERROR

04-11 18:02:13.189: D/Retrofit(16390): ---> HTTP GET http://10.0.0.104:3000/api/v1/orders.json
04-11 18:02:13.189: D/Retrofit(16390): ---> END HTTP (0-byte body)

04-11 18:02:16.190: D/Retrofit(16390): ---- ERROR http://10.0.0.104:3000/api/v1/orders.json
04-11 18:02:16.203: D/Retrofit(16390): java.net.ConnectException: failed to connect to /10.0.0.104 (port 3000) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:02:16.203: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:223)
04-11 18:02:16.203: D/Retrofit(16390):  at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
04-11 18:02:16.203: D/Retrofit(16390):  at libcore.io.IoBridge.connect(IoBridge.java:112)
04-11 18:02:16.203: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-11 18:02:16.203: D/Retrofit(16390):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
04-11 18:02:16.203: D/Retrofit(16390):  at java.net.Socket.connect(Socket.java:833)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.Platform$Android.connectSocket(Platform.java:248)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.Connection.connect(Connection.java:98)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:236)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:180)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:366)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:319)
04-11 18:02:16.203: D/Retrofit(16390):  at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:484)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:71)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:358)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
04-11 18:02:16.203: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-11 18:02:16.203: D/Retrofit(16390):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-11 18:02:16.203: D/Retrofit(16390):  at retrofit.Platform$Android$2$1.run(Platform.java:142)
04-11 18:02:16.203: D/Retrofit(16390):  at java.lang.Thread.run(Thread.java:841)
04-11 18:02:16.203: D/Retrofit(16390): Caused by: libcore.io.ErrnoException: isConnected failed: EHOSTUNREACH (No route to host)
04-11 18:02:16.203: D/Retrofit(16390):  at libcore.io.IoBridge.isConnected(IoBridge.java:208)
04-11 18:02:16.203: D/Retrofit(16390):  ... 22 more
04-11 18:02:16.203: D/Retrofit(16390): ---- END ERROR

编辑2

此错误发生在 Android 4.4.2 中,但不会发生在运行 Android 4.1.0 的设备中。

最佳答案

查看我对 Previously mentioned thread 的评论.在您的代码中,POST 请求似乎没有最后的斜杠“/”

关于java - Retrofit+OkHttp 在发送 GET 请求时可以,但在发送 POST 时给出 SocketTimetout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874303/

有关java - Retrofit+OkHttp 在发送 GET 请求时可以,但在发送 POST 时给出 SocketTimetout的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  4. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  5. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  6. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  7. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  10. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

随机推荐