今天俱乐部有同学做一个与第三方对接的项目,对方的项目在接收到 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 构造方法可以携带参数,实现更灵活的功能。