去除 undertow Status Code 200 状态后的 OK 字符串

    今天俱乐部有同学做一个与第三方对接的项目,对方的项目在接收到 http 响应后,只能支持 http status code 为 200,而不能接受该状态后方的 "OK" 字符串。该 "OK" 字符串如下所示:

    200-ok.png

    通过在 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 构造方法可以携带参数,实现更灵活的功能。

评论区

zzutligang

2020-04-24 18:05

@JFinal,能不能在你的代码里把这里修改成读取参数配置啊。或则给一个设置方法。自己扩展,总归感觉倒不是很正宗。和第三方对接,确实会遇到这种奇葩的问题。

JFinal

2020-04-24 18:36

@zzutligang 配置不可能解决所有问题,尤其是低概率需求的事情做成配置很不划算也不现实

这已经是最正宗的解决方案,configHandler 本身就是留给扩展用的

JAdmins

2020-04-26 20:30

@JFinal @zzutligang 说得非常正确,在不大影响性能的情况下,其实一切皆为配置,只是观念上的差别而已了

haojay

2020-04-26 22:56

@JFinal 赞同,小众需求没有必要做到常规配置里

JFinal

2020-04-27 01:00

@JAdmins @haojay 通过查看 http 协议规范得知,有这个 "OK" 字符串是标准动作,本质上不应该去掉它,所以更没必要做成配置了

热门分享

扫码入社