gpt4 book ai didi

Clojure 注释和整数

转载 作者:行者123 更新时间:2023-12-02 17:57:07 24 4
gpt4 key购买 nike

我正在向 JaxRs 带注释的服务添加 Swagger 注释。

我有以下内容:

(^{
GET true
Path "/{who}"
ApiOperation {:value "Get a hello" :notes "simple clojure GET"}
Produces ["text/plain; charset=UTF-8"]
ApiResponses {:value [(ApiResponse {:code 200 :message "yay!"})]}

}

如果我反编译生成的类,注释将如下所示:

@ApiResponses({@com.wordnik.swagger.annotations.ApiResponse(code=200L, message="yay!")})
@Produces({"text/plain; charset=UTF-8"})
@ApiOperation(value="Get a hello", notes="simple clojure GET")
@Path("/{who}")
@GET(true)

注意到第一个注释代码=200L

在运行时,这个值必须是一个int,我不知道如何实现这一点

如果我尝试

ApiResponses {:value [(ApiResponse {:code (int 200) :message "yay!"})]}

我收到编译错误(使用 maven swagger 插件)

Exception in thread "main" java.lang.ClassCastException: clojure.lang.Var cannot be cast to java.lang.Class, compiling:(pocclj/resourceclj.clj:14)

我已经尝试过

(def success (int 200))
...
ApiResponses {:value [(ApiResponse {:code success :message "yay!"})]}

这会产生此编译错误:

Exception in thread "main" java.lang.IllegalArgumentException: Unsupported annotation value: success of class class java.lang.Integer, compiling:(pocclj/resourceclj.clj:14)

我尝试了很多其他东西(deref 等),但找不到秘诀。

我对 clojure 相当陌生,迫切需要一些帮助。

提前致谢

马丁

最佳答案

您正确设置了“:code”的类型。可以独立测试:

user> (def something ^{:ApiResponses {:code (int 200) :message "yay!"}} {:some :data :goes :here})
#'user/something

user> (meta something)
{:ApiResponses {:code 200, :message "yay!"}}

user> (-> (meta something) :ApiResponses :code type)
java.lang.Integer

如果没有转换,元数据包含错误的类型:

user> (def something-wrong ^{:ApiResponses {:code 200 :message "yay!"}} {:some :data :goes :here})
#'user/something-wrong

user> (meta something)
{:ApiResponses {:code 200, :message "yay!"}}

user> (-> (meta something-wrong) :ApiResponses :code type)
java.lang.Long

从异常来看,对 ApiResponse 的调用可能正在崩溃。如果 ApiResponse 是一个需要数字而不是 s 表达式的宏,那么我可以看到它无法正确处理这个问题。如果它是一个函数,您需要调查它崩溃的原因。

如果我为 ApiResponse 提供 stub 实现,那么它对我有用:

user> (definterface Fooi (Something []))
user.Fooi

user> (def ApiResponse identity)
#'user/ApiResponse

user> (deftype Foo []
Fooi
(Something
^{GET true
Path "/{who}"
ApiOperation {:value "Get a hello" :notes "simple clojure GET"}
Produces ["text/plain; charset=UTF-8"]
ApiResponses {:value [(ApiResponse {:code (int 200) :message "yay!"})]}}
[this] (identity this)))
user.Foo

关于Clojure 注释和整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com