fork download
  1. case class Connection()
  2. case class Request(method: String)
  3. case class Response(/* body: OutputStream */)
  4.  
  5. trait Handler {
  6. def handle(connection: Connection, request: Request): Response
  7. }
  8.  
  9. trait HEADHandler extends Handler {
  10. abstract override def handle(connection: Connection, request: Request): Response = {
  11. val nonHEADRequest =
  12. if (request.method == "HEAD") request.copy(method = "GET"/*, body = NullOutputStream.NULL_OUTPUT_STREAM*/)
  13. else request
  14. super.handle(connection, nonHEADRequest)
  15. }
  16. }
  17.  
  18. class MyHandler extends Handler {
  19. override def handle(connection: Connection, request: Request): Response = {
  20. println(request)
  21. Response()
  22. }
  23. }
  24.  
  25. object Main extends App {
  26. val handler = new MyHandler with HEADHandler
  27. handler.handle(Connection(), Request("GET"))
  28. handler.handle(Connection(), Request("HEAD"))
  29. handler.handle(Connection(), Request("PUT"))
  30. handler.handle(Connection(), Request("POST"))
  31. handler.handle(Connection(), Request("DELETE"))
  32. }
  33.  
Success #stdin #stdout 0.38s 382080KB
stdin
Standard input is empty
stdout
Request(GET)
Request(GET)
Request(PUT)
Request(POST)
Request(DELETE)