Возврат Clojure PersistentVector из Spring Boot RestController - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь вернуть Clojure PersistentVector из метода Spring Boot RestController:

@GetMapping("example")
public PersistentVector someVector() {
    return PersistentVector.create(42, "hello");
}

Однако кажется, что Spring Boot рассматривает PersistentVector как функцию (этоподтип Runnable и Callable):

clojure.lang.ArityException: Wrong number of args (0) passed to: PersistentVector

at clojure.lang.AFn.throwArity(AFn.java:429) ~[clojure-1.9.0.jar:na]
at clojure.lang.AFn.invoke(AFn.java:28) ~[clojure-1.9.0.jar:na]
at clojure.lang.AFn.call(AFn.java:18) ~[clojure-1.9.0.jar:na]

at org.springframework.web.context.request.async.WebAsyncManager.lambda$startCallableProcessing$4(WebAsyncManager.java:323) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_181]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_181]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_181]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]

Как мне сказать Spring Boot вместо PersistentVector трактовать List (это также подтип List)?

1 Ответ

0 голосов
/ 13 декабря 2018

Путаница между списком и функцией может быть решена путем явного вызова .iterator() для вектора:

@GetMapping("example")
public Iterator someVector() {
    // ~~~~~~~~
    return PersistentVector.create(42, "hello").iterator();
}                                           // ~~~~~~~~~~~

Возможно, не самое чистое решение, но, эй, оно выполнит свою работу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...