You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Javalin转译Clojure后出现的方法调用参数不匹配错误?

Javalin Clojure代码错误修复方案

错误原因

原代码错误地将Javalin的实例方法get当作静态方法调用。Java中app.get(...)是调用Javalin实例的方法,而非通过Javalin类直接调用静态方法,因此Clojure编译器找不到匹配3个参数的静态get方法,抛出IllegalArgumentException。

修复方案

将静态方法调用形式改为实例方法调用,或使用Clojure的doto宏模拟Java的链式调用风格,两种方式都可解决问题:

方式1:直接调用实例方法

修改get方法的调用方式,从(Javalin/get app ...)改为(.get app ...):

(ns javalin.javalin101)

(import 'io.javalin.Javalin)

(defn -main []
  (let [app (Javalin/create)]
    ;; 改为实例方法调用
    (.get app "/" (fn [ctx] (.result ctx "Hello World")))
    (.start app 7070)))

方式2:使用doto宏简化链式调用

用doto宏可以更贴近Java的链式写法,代码更简洁:

(ns javalin.javalin101)

(import 'io.javalin.Javalin)

(defn -main []
  (doto (Javalin/create)
    (.get "/" (fn [ctx] (.result ctx "Hello World")))
    (.start 7070)))

优化后的deps.edn(可选)

原deps中包含了与Javalin示例无关的依赖(如core.async、data.json、clj-time),可以移除以精简依赖:

{:paths ["src"]
 :deps
 {org.clojure/clojure {:mvn/version "1.11.1"}
  io.javalin/javalin {:mvn/version "5.5.0"}}}

验证步骤

  1. 在Calva中打开项目,连接REPL
  2. 加载修复后的javalin.javalin101命名空间
  3. 执行(-main)启动服务
  4. 访问http://localhost:7070,页面应返回Hello World

内容的提问来源于stack exchange,提问作者madeinQuant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:20:00