今天俱乐部有同学做一个与第三方对接的项目,对方的项目在接收到 http 响应后,只能支持 http status code 为 200,而不能接受该状态后方的 "OK" 字符串。该 "OK" 字符串如下所示:
通过在 jfinal undertow 下扩展 UndertowServer 可以很优雅地实现,代码如下:
import com.jfinal.server.undertow.UndertowConfig; import com.jfinal.server.undertow.UndertowServer; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; public class MyUndertowServer extends UndertowServer { // 去除 status code 后面的 "OK" 字符串 public static class MyHandler implements HttpHandler { private HttpHandler next; public MyHandler(HttpHandler next) { this.next = next; } public void handleRequest(HttpServerExchange exchange) throws Exception { next.handleRequest(exchange); if (exchange.getStatusCode() == 200) { exchange.setReasonPhrase(""); } } } protected MyUndertowServer(UndertowConfig undertowConfig) { super(undertowConfig); } // 覆盖掉父类的 configHandler,添加上扩展的 MyHandler @Override protected HttpHandler configHandler(HttpHandler next) { return new MyHandler(next); } public static void main(String[] args) { // 注意只有 new 出子类,才能调用子类覆盖的 configHandler 方法: java 基础 new MyUndertowServer(new UndertowConfig(JFinalComConfig.class)).start(); } }
本分享主要目的是为了演示如何扩展 jfinal undertow 的 UndertowServer 类,注意观察 UndertowServer 子类覆盖的构造方法:
protected MyUndertowServer(UndertowConfig undertowConfig) { super(undertowConfig); }
虽然 UndertowServer 可扩展的构造方法只有 UndertowConfig 参数,但该 UndertowConfig 构造方法可以携带参数,实现更灵活的功能。