Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http服务器(Vertx上的Java)未获取POST参数_Java_Http_Vert.x - Fatal编程技术网

Http服务器(Vertx上的Java)未获取POST参数

Http服务器(Vertx上的Java)未获取POST参数,java,http,vert.x,Java,Http,Vert.x,我正在从客户端发送ajax请求,例如: <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script> $(document).ready(function() { $.ajax({ url: "http

我正在从客户端发送ajax请求,例如:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function() {
        $.ajax({
        url: "http://192.168.1.74:8888",

        type: "POST",
        data: ({username: 'Bobby'})

    });
})
</script>
</head>
<body>
</body>
</html>

$(文档).ready(函数(){
$.ajax({
url:“http://192.168.1.74:8888",
类型:“POST”,
数据:({用户名:'Bobby'})
});
})
我的Http服务器是用Java编写的,使用vertx如下:

public class Main extends AbstractVerticle {


  @Override
  public void start() throws Exception {


       vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
        @Override
        public void handle(HttpServerRequest request) {

          System.out.println(request.getParam("username"));    

        }
    }).listen(8888);

  }
}
public类Main扩展了AbstractVerticle{
@凌驾
public void start()引发异常{
createHttpServer().requestHandler(新处理程序(){
@凌驾
公共无效句柄(HttpServerRequest){
System.out.println(request.getParam(“用户名”);
}
}).听(8888);
}
}
每次我运行客户机时,服务器都会写入控制台,以便发送请求,但服务器表示该值为null。我做错了什么?如何读取从客户端发送的POST参数

更新:


我发现了问题,但没有解决办法。如果我将ajax更改为GET from POST,那么它就会出现。我如何使它为POST而不是GET工作?那么现在发生的事情的反面呢

欢呼声

数据:{“用户名”:“Bobby”}将解决您的问题,并删除()。您还可以尝试在jquery中更改ajax请求,如下所示

var datavar = {username:"someusername"}; //Array 

$.ajax({
    url : "AJAX_POST_URL",
    type: "POST",
    data : datavar,
    success: function(data, textStatus, jqXHR)
    {
       alert("success") ; 
    },
    error: function (jqXHR, textStatus, errorThrown)
    {
 alert("fail") ; 
    }
});

我在做项目时遇到了这个问题。我在客户端使用Dojo。我设法通过在客户端和服务器端进行调整来解决这个问题

客户:

var json = JSON.stringify({
    "username": "Bobby"
}); 
request.post("yoururl", {
    data: json,
    headers: {
       "Content-Type": "application/javascript"
    }
});
显然,在服务器端,所需要的是在处理代码之前调用BodyHandler.create()方法

router.route(HttpMethod.POST, "yoururl").handler(BodyHandler.create());
router.route(HttpMethod.POST, "yoururl").handler(routingContext -> 
{    
    String sectionType = routingContext.request().getParam("sectionId");
    JsonObject j = routingContext.getBodyAsJson();
});

我希望这能解决您的问题。

当执行POST请求时,数据在正文中。 在服务器端,您需要为路由器注册一个body处理程序,以便能够轻松地从请求中获取body。您可以这样做:

final Router router = Router.router(vertex);
// Adding a BodyHandler for routes
router.route().handler(BodyHandler.create());
router.post("/your/endpoint").handler(routingContext -> {
   System.out.println(routingContext.getBodyAsString());
});
final Router router = Router.router(vertex);
router.post("/your/endpoint").handler(routingContext -> {
  routingContext.request().bodyHandler(body -> {
    System.out.println(body.toString());
  });
});
另一个选项是添加另一个回调处理程序,如下所示:

final Router router = Router.router(vertex);
// Adding a BodyHandler for routes
router.route().handler(BodyHandler.create());
router.post("/your/endpoint").handler(routingContext -> {
   System.out.println(routingContext.getBodyAsString());
});
final Router router = Router.router(vertex);
router.post("/your/endpoint").handler(routingContext -> {
  routingContext.request().bodyHandler(body -> {
    System.out.println(body.toString());
  });
});

仍然返回null和引号。我发现了问题,但没有解决方案。如果我将ajax更改为GET from POST,那么它就会出现。我如何使它为POST而不是GET工作?那么现在发生的事情正好相反?我尝试了你的新查询,但它似乎仍然不想使用POST。使用GET.POST参数的工作在请求正文中,这需要异步读取。我不熟悉vertx,但我在异步http服务器中是如何做到这一点的。