我有RESTEasy(JAX-RS)服务器,有大约60个服务(到目前为止).我想通过服务器构建时间自动为提供者调用者注入一个自定义响应头:X-BuildTime: 20100335.1130.
有没有一种简单的方法可以在不修改我的每项服务的情况下完成
我试图使用实现一类org.jboss.resteasy.spi.interception.PostProcessInterceptor带注解@Provider和@ServerInterceptor,但我无法弄清楚如何修改传递到我的ServerResponse postProcess()方法.
如果我定义一个返回如下函数的函数:
(defn add-n
[n]
(fn [x] (+ x n)))
Run Code Online (Sandbox Code Playgroud)
然后我可以将结果分配给符号:
(def add-1 (add-n 1))
Run Code Online (Sandbox Code Playgroud)
并称之为:
(add-1 41)
;=> 42
Run Code Online (Sandbox Code Playgroud)
如何在(add-n 1)不将其分配给新符号的情况下调用结果?以下产生此输出:
(println (add-n 1))
#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>
nil
Run Code Online (Sandbox Code Playgroud)
它#<user$add_n$fn__33 user$add_n$fn__33@e9ac0f5>是生成函数的内部引用.
是否有Clojure 的"标准"元数据属性列表(:author,:copyright等),或者我是否需要阅读源代码:-)?
也许ClojureDocs可以承担这项任务(建议).
我有读取XML文件的代码.我需要处理的元素的一些属性是可选的.我正在尝试使用Option [T]来管理它们.我已经写了以下内容来pimp \Node运算符返回的NodeSeq类型:
class NodeSeqWrapper(nodeSeq: NodeSeq) {
def textOption: Option[String] = {
val text = nodeSeq.text
if (text == null || text.length == 0) None else Some(text)
}
}
implicit def nodeSeqWrapper(nodeSeq: NodeSeq): NodeSeqWrapper =
new NodeSeqWrapper(nodeSeq)
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
(node \ "@attr").textOption.getOrElse("Some default value")
Run Code Online (Sandbox Code Playgroud)
如果节点具有"attr"属性,则此代码获取其值.如果没有,则返回值"Some default value".
我怎样才能改善这个?有没有办法将类定义折叠到隐式方法中?有没有更好的方法来获取"可选"属性值?我使用Option[T]"正确"吗?
Java NIO是否需要Windows上的特殊权限?
当我在Windows Server 2003上运行以下Java代码时,它失败并出现"拒绝访问"错误(这是cygwin终端窗口中的整个消息):
new FileOutputStream(outputFile).getChannel()
.transferFrom(new FileInputStream(inputFile).getChannel(), 0, Long.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
但如果我使用Apache commons-io(我假设它不使用NIO,它使用相同的输入和输出文件:
final FileInputStream inputStream = new FileInputStream(inputFile)
final FileOutputStream outputStream = new FileOutputStream(outputStream)
IOUtils.copy(inputStream, outputStream);
Run Code Online (Sandbox Code Playgroud)
我使用管理员帐户在Java 5中运行.是否有必须设置的特殊文件权限?
这个问题纯粹来自"心理大师",可能没有实际价值.
如果我在Clojure中定义一个值def,是否可以诱导编译器在编译时对其进行评估,而不是等到运行时?
(def the-answer 42)
(+ the-answer 1)
Run Code Online (Sandbox Code Playgroud)
我想我可以定义一个宏,但调用语法变得有点尴尬:
(defmacro the-answer [] 42)
(+ (the-answer) 1)
Run Code Online (Sandbox Code Playgroud)
这也有效,但仍然很难看:
(+ `~the-answer 1)
Run Code Online (Sandbox Code Playgroud)
我也理解(或相信)Clojure在编译时评估常量表达式:
(def milliseconds-per-day (* 24 60 60 1000))
Run Code Online (Sandbox Code Playgroud)
我只是在学习Common Lisp,但我的理解是Common Lisp支持用户定义的阅读器宏,所以你可以定义一个阅读器宏(类似的东西#$),它在编译时评估下面的符号:
(+ #$the-answer 1)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,该语法并不比宏调用"更漂亮".
如何让Clojure在编译时评估常量变量并用实际值替换引用?它已经这样做了吗?
在任何人开始引用Knuth定律之前("过早优化是所有邪恶的根源"),我要求这个问题更好地理解Clojure编译的内部.
我有一个\x f -> f x正在foldM操作中使用的lambda ,其中x是一个值和f :: a -> b.
是否有内置功能可以做到这一点?
我可以更换吗?
foldM (\x f -> f x) ...
Run Code Online (Sandbox Code Playgroud)
和一些 f'
foldM f' ...
Run Code Online (Sandbox Code Playgroud)
我以为flip会这样做,但需要三个参数(flip :: (a -> b -> c) -> b -> a -> c)
它可能类似于|>F#.
我可能不太了解IO monad.
如果我编写一个预计运行数月的应用程序,同时记录其进度,那么IO monad会将所有日志信息保存在RAM中直到结束吗?
在IO Inside的博客中,Haskell将世界塑造为
main :: RealWorld -> ((), RealWorld)
Run Code Online (Sandbox Code Playgroud)
这样在执行代码的Haskell部分期间不会发生IO,但只有在应用程序返回时才会发生main.
我可能完全误解了这一点.有人能解释时哈斯克尔实际上做IO?
我正在尝试为以下URL编写Play Framework异步Action:
POST /users/:userId/items
Run Code Online (Sandbox Code Playgroud)
我的数据库调用的所有返回Future[...],其中...是Option[A]对find的方法和Option[Id]用于创建方法.
我想在尝试创建新项目之前检查userId是否存在.我有一个方法Users.findById(userId)返回一个Future[Option[User]].结果是Some(User)如果用户存在,None如果不存在.Items.create()也返回一个Future[Option[itemId]].
我正在尝试使用for以下方法撰写:
for {
user <- Users.findById(userId)
if user.isDefined
} yield {
Items.create(...) map { itemId => Ok(itemId) } getOrElse NotFound
}
Run Code Online (Sandbox Code Playgroud)
Ok(itemId)如果项目成功创建,我想返回.我不知道如何处理错误案例.NotFound如果userId无效或无法创建项目(可能是某个字段与数据库中已存在的唯一值冲突),我想返回.
我不确定for结构后要放什么.我试过了getOrElse,但是没有编译,因为Future没有getOrElse方法.
理想情况下,我可以处理包含几个要检查的ID的URL,例如:
PUT /users/:userId/foo/:fooId/bar/:barId
Run Code Online (Sandbox Code Playgroud)
并确认userId,fooId和barId正在做的更新之前都有效.所有这些电话的(Users.findById,Foo.findById,和Bar.findById)将返回 …
以下函数f尝试Int使用IO (Maybe Int)函数两次读取两次,但在成功读取一次后执行"短路"执行Int:
readInt :: IO (Maybe Int)
f :: IO (Maybe Int)
f = do
n1 <- readInt
case n1 of
Just n' -> return (Just n')
Nothing -> do
n2 <- readInt
case n2 of
Just n' -> return (Just n')
Nothing -> return Nothing
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方法来重构这段代码?如果我将它扩展到三次尝试,这将变得非常毛茸茸......
(我的思维过程:看到这个"staircasing"告诉我,也许我应该使用Monad的情况Maybe,但由于这是已经在IO单子,我将不得不使用MaybeT(),但我只需要?一个的readInt来成功,所以Maybemonad在第一次Nothing出错的行为在这里是错误的...)
clojure ×3
haskell ×3
monads ×3
scala ×2
coding-style ×1
http-headers ×1
io ×1
io-monad ×1
java ×1
jax-rs ×1
maybe ×1
metadata ×1
nio ×1
option ×1
response ×1
resteasy ×1
web-services ×1
windows ×1
xml-parsing ×1