小编sha*_*ang的帖子

如何在特定的reitit路由上应用环防伪?

在包装使用metosin/reitit 创建的特定路由时,我不断收到“无效的防伪令牌” reitit.ring/ring-router。我也试过 reitit 的中间件 registry,但它也不起作用。虽然我可以用wrap-sessionand包装整个处理程序wrap-anti-forgery,但这会破坏 reitit 在允许特定于路由的中间件方面的优势。

(ns t.core

 (:require [immutant.web :as web]
           [reitit.ring :as ring]
           [ring.middleware.anti-forgery :refer [wrap-anti-forgery]]
           [ring.middleware.content-type :refer [wrap-content-type]]
           [ring.middleware.params :refer [wrap-params]]
           [ring.middleware.keyword-params :refer [wrap-keyword-params]]
           [ring.middleware.session :refer [wrap-session]]
           [ring.util.anti-forgery :refer [anti-forgery-field]]
           [ring.util.response :as res]))


(defn render-index [_req]
 (res/response (str "<form action='/sign-in' method='post'>"
                    (anti-forgery-field)
                    "<button>Sign In</button></form>")))

(defn sign-in [{:keys [params session]}]
 (println "params: " params
          "session:" session)
 (res/redirect "/index.html"))

(defn wrap-af [handler]
 (-> handler
     wrap-anti-forgery
     wrap-session
     wrap-keyword-params
     wrap-params))

(def …
Run Code Online (Sandbox Code Playgroud)

clojure ring

6
推荐指数
1
解决办法
536
查看次数

如何在Scala中扩展包含泛型方法的Java接口?

假设我们有以下Java接口:

// Java
public interface Foo {
    <T> T bar(Class<T> c);
}
Run Code Online (Sandbox Code Playgroud)

我应该如何在Scala中扩展它?写作

// Scala
class FooString extends Foo {
  override def bar(c: Class[String]): String = "hello, world";
}
Run Code Online (Sandbox Code Playgroud)

将导致编译器抛出"类FooString需要是抽象的,因为类型为[T ](Class [T])T的特征Foo中的方法栏未定义."

提前致谢!

更新: 丑陋的事实是:我误解了Java中的泛型.

在任何情况下,我的困境的解决方案都显示在尼古拉斯和沃尔特的答案中,尽管我更喜欢沃尔特的答案,因为它不那么冗长.

java generics scala interface type-parameter

4
推荐指数
1
解决办法
4327
查看次数

标签 统计

clojure ×1

generics ×1

interface ×1

java ×1

ring ×1

scala ×1

type-parameter ×1