Использование Clojure с сервером REST на основе аннотаций

Я рассматриваю возможность записи сервера REST с помощью Clojure.

У меня есть опыт использования RESTEasy с Java. Он использует аннотации для связывания URL-адресов, параметров шаблона и параметров запроса с Java-классами, методами и параметрами метода. Я считаю, что Jersey REST Server также использует аннотации (так как он также основан на JAX-RS).

Можно ли использовать эти фреймворки с помощью Clojure? Есть ли официальный способ связать аннотации с функциями?

Ответ 1

Я нашел ответ в четвертой книге "Clojure Программирование", Час Эмерик, Брайан Карпер и Кристоф Гранд.

Если вы определяете новый тип с помощью deftype, вы можете добавить аннотации вновь созданного класса:

(ns my.resources
  (:import (javax.ws.rs Path PathParam Produces GET)))

(definterface PersonService
  (getPerson [^Integer id]))

(deftype ^{Path "/people/{id}"} PersonResource []
  PersonService
  (^{GET true                                                
     Produces ["text/plain"]}
    getPerson
    [this ^{PathParam "id"} id]           
    ; blah blah blah    
  ))

Я не уверен, будет ли это работать с gen-class. Мне нужно поэкспериментировать.