- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Compojure 中有一个 Web 服务,其中一条路由如下所示:
"/myapp/dosomething/:input"
当 :input 是应用程序处理的正常内容时,这很有效,例如一个单词,一串数字等,但是当输入垃圾时,例如
GET /myapp/dosomething/%25%24%25%5E%24%25%5E%25%24%5E
我收到 500 错误。我的问题是,如何捕获它并返回 400?
HTTP ERROR 500
Problem accessing /myapp/dosomething/%25%24%25%5E%24%25%5E%25%24%5E. Reason:
Server Error
Caused by:
java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "$%"
at java.net.URLDecoder.decode(URLDecoder.java:192)
at clout.core$path_decode.invoke(core.clj:33)
at clout.core$path_decode.invoke(core.clj:31)
at clojure.core$map$fn__4207.invoke(core.clj:2485)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.RT.seq(RT.java:484)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core$map$fn__4211.invoke(core.clj:2490)
at clojure.lang.LazySeq.sval(LazySeq.java:42)
at clojure.lang.LazySeq.seq(LazySeq.java:60)
at clojure.lang.RT.seq(RT.java:484)
at clojure.core$seq.invoke(core.clj:133)
at clojure.core.protocols$seq_reduce.invoke(protocols.clj:30)
at clojure.core.protocols$fn__6026.invoke(protocols.clj:54)
at clojure.core.protocols$fn__5979$G__5974__5992.invoke(protocols.clj:13)
at clojure.core$reduce.invoke(core.clj:6177)
at clout.core$assoc_keys_with_groups.invoke(core.clj:54)
at clout.core.CompiledRoute.route_matches(core.clj:84)
at compojure.core$if_route$fn__472.invoke(core.clj:38)
at compojure.core$if_method$fn__465.invoke(core.clj:24)
at compojure.core$routing$fn__490.invoke(core.clj:106)
at clojure.core$some.invoke(core.clj:2443)
at compojure.core$routing.doInvoke(core.clj:106)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:619)
at compojure.core$routes$fn__494.invoke(core.clj:111)
at ring.middleware.keyword_params$wrap_keyword_params$fn__710.invoke(keyword_params.clj:27)
at ring.middleware.nested_params$wrap_nested_params$fn__749.invoke(nested_params.clj:65)
at ring.middleware.params$wrap_params$fn__682.invoke(params.clj:55)
at ring.middleware.multipart_params$wrap_multipart_params$fn__777.invoke(multipart_params.clj:103)
at ring.middleware.flash$wrap_flash$fn__1064.invoke(flash.clj:14)
at ring.middleware.session$wrap_session$fn__1055.invoke(session.clj:40)
at ring.middleware.cookies$wrap_cookies$fn__986.invoke(cookies.clj:160)
at vinws_chrome.servlet$_service$fn__116.invoke(servlet.clj:1)
at ring.util.servlet$make_service_method$fn__54.invoke(servlet.clj:145)
最佳答案
此问题出现在由 Lein-Ring 插件生成的 war 文件中,并且最近已根据此报告在 Lein-Ring 0.8.6 中得到修复。
原因与 Java Servlet 和 Ring 处理路径信息字段的方式不同有关。 Java Servlet 规范对上下文路径进行了 url 编码,但对路径信息进行了解码。 Ring 将 :context
和 :path-info
键都视为 url 编码。
关于clojure - Compojure:陷阱 500 URL 解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373206/
我正在尝试使以下任何映射工作以映射 http://mysite.org/add?http://sitetoadd.com或 http://mysite.org/add?u=http://sitetoa
我在以下Compojure示例中获取表单参数时遇到问题: (ns hello-world (:use compojure.core, ring.adapter.jetty) (:require
尽管添加了换行参数等,我的 Compojure Web 应用程序 ([compojure "1.0.1"]) 始终收到空参数映射。代码示例如下: (defroutes public-routes
我已经为此苦恼了两天多了,但似乎没有找到解决方案。 所以我想做的就是在浏览器中显示图像,但是当我调用端点时,会发生以下情况: Cannot JSON encode object of class: c
我有一个小型 compojure 站点,其路由定义如下: (defroutes example (GET "/" [] {:status 200 :headers {
我有一堆共享相同页眉和页脚的静态 html 文件。我想要在所有页面上共享此页眉和页脚。现在我使用以下路由,但它有点难看,我必须处理所有特殊情况。有没有简单的方法可以做到这一点,例如 php 的 inc
我有一个使用 Compojure 和这种端点的应用程序 (defroutes routes (POST "/api/v1/echo" req (str req)) (def http-handle
我正在尝试理解 compojure 中间件: 以下代码来自compojure template : (def app (wrap-defaults app-routes site-defaults
我正在使用带有基本身份验证中间件的 Compojure 编写 Web API。基本身份验证部分类似于: (defn authenticated? [id pass] (and (= id "b
我有一个使用 Compojure 和这种端点的应用程序 (defroutes routes (POST "/api/v1/echo" req (str req)) (def http-handle
我的代码: (defn json-response [data & [status]] {:status (or status 200) :headers {"Content-Typ
我正在使用 Compojure 1.6.0 构建网络应用程序。对于第三方 JS 库,我使用 npm 安装它们,将它们放在一个名为 node_modules 的文件夹中(不可自定义)。为了服务他们,我这
这是我的 project.clj 文件: (defproject org.github.pistacchio.deviantchecker "0.9.0" :description "A one
例如 Luminus 网站 states那 Compojure route definitions are just functions that accept request maps and re
我有以下路线定义: (require '[compojure.core :as ccore] '[ring.util.response :as response]) (def *ma
我正在尝试从 url 查询字符串中提取一个值,但是我可以返回我认为是 map 的内容,但是当我使用下面的代码时,它不会按预期处理它。谁能建议我如何访问返回的查询字符串数据结构中的特定值? http:/
我听说过两个基于 Clojure 的 Web 应用程序框架:Webjure 和 Compojure。有人可以让我知道哪个更好吗? 最佳答案 现在您可以添加 Ring到列表中。所有这些框架都非常新,并且
我目前正在使用 Compojure(以及 Ring 和相关中间件)在 Clojure 中编写 API。 我正在尝试根据路线应用不同的身份验证代码。考虑以下代码: (defroutes public-r
我正在尝试创建一个路由,该路由的参数在 compojure 中包含逗号 (GET "/tags/multiple/:tag-names" [tag-names] multiple-tags) 但由于某
我的堆栈跟踪不包含对我的代码的任何引用。我不知道如何开始找出这里可能出了什么问题: LazySeq.java:47 clojure.lang.LazySeq.sval LazySeq.java:56
我是一名优秀的程序员,十分优秀!