0

In Compojure one can define default 404 behavior, e.g.,

(defroutes app-routes
  ;; ...
  (route/not-found "These aren't the droids you're looking for."))

As we've been increasing the number and complexity of REST endpoints, we've been looking into switching to Swagger / compojure-api. Swagger seems higher level and quite different from basic Compojure. What's the correct idiom for customizing 404 behavior using this library?

JohnJ
  • 4,753
  • 2
  • 28
  • 40

1 Answers1

2

There is no definition in the Swagger Spec for the "missed everything else" default handler of Compojure. Swagger is about documenting existing apis, not the non-existing. Just discussed about this at #swagger on freenode.

Still, you can describe the default routes manually with compojure-api, created a sample here: https://gist.github.com/ikitommi/cdf19eeaf4918efb051a.

Note: Swagger spec doesn't actually understand the ANY -http method, but does seem to work with the 1.2 Swagger UI - will not work with codegens. To be standard compliant, you should add manually handlers for all http methods (https://github.com/swagger-api/swagger-spec/blob/e42dd2011340a12efbb531f593c0f99c831c4582/schemas/v1.2/operationObject.json#L10) to the end of your route definitions.

hope this helps.

Tommi Reiman
  • 268
  • 1
  • 6
  • One last thing - the `ANY/*` bit in your gist causes `/*` to show up in the API docs page, which we didn't want; omitting `ANY/*` and moving `route/not-found` to the toplevel `swaggered` form gets around this. – JohnJ Dec 15 '14 at 21:34