1、application/x-www-form-urlencoded和application/json的区别
application/x-www-form-urlencoded方式是Jquery的Ajax请求默认方式,这种方式的好处就是浏览器都支持,在请求发送过程中会对数据进行序列化处理,以键值对形式。
另外浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。
application/json这种方式,后台发送数据的格式必须为json字符串。
2、编写BodyVerticle类
package vertx; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.handler.BodyHandler; public class BodyVerticle extends AbstractVerticle { //第一步 声明Router Router router; @Override public void start(Promise<Void> startPromise) throws Exception { //第二步 初始化Router router = Router.router(vertx); //获取body参数,得先添加这句 router.route().handler(BodyHandler.create()); //第三步 配置Router解析url /** * application/x-www-form-urlencoded格式 * 请求头中的 content-type: application/x-www-form-urlencoded */ router.route("/test/form").handler( req -> { var page = req.request().getFormAttribute("page"); req.response() .putHeader("content-type", "text/plain") .end(page); } ); /** * application/json格式 * 请求头中的 content-type: application/json */ router.route("/test/json").handler( req -> { var page = req.getBodyAsJson(); req.response() .putHeader("content-type", "text/plain") .end(page.toString()); } ); //第四步 将Router与vertx HttpServer 绑定 vertx.createHttpServer().requestHandler(router).listen(8888, http -> { if (http.succeeded()) { startPromise.complete(); System.out.println("HTTP server started on port 8888"); } else { startPromise.fail(http.cause()); } }); } }
3、启动并测试
application/x-www-form-urlencoded格式
application/json格式
获取json中的某一个值
/** * json格式 * content-type: application/json */ router.route("/test/json").handler( req -> { var page = req.getBodyAsJson(); req.response() .putHeader("content-type", "text/plain") .end(page.getValue("page").toString()); } );