gpt4 book ai didi

grails - 在 Controller 操作中修剪字符串请求参数

转载 作者:行者123 更新时间:2023-12-02 14:59:55 25 4
gpt4 key购买 nike

我正在一个 grails 2.4.4 应用程序中工作,该应用程序具有一些不使用 Controller 中的绑定(bind)或命令对象的遗留代码,在此应用程序中,请求参数使用它们的构造函数从 Controller 操作直接传递到 java 类。

我们希望从字符串参数中去除空格(就像 Grails 在绑定(bind)时默认所做的那样),但不使用绑定(bind)或命令对象。

也许注入(inject) params 变量的克隆版本但具有修剪值?

你们中有人做过这样的事情吗?

最佳答案

这是我在过滤器中的 2.x 应用程序中使用的实现。它通过递归调用方法来支持嵌套对象:

def filters = {
blankToNullAndTrim(controller: '*', action: '*') {
before = {
convertBlanksToNullsAndTrim params
true
}
}
}

private static void convertBlanksToNullsAndTrim(Map<String, Object> map) {
def keys = map.keySet() as List // copy to avoid ConcurrentModificationException
for (name in keys) {
def value = map[name]
if (value instanceof String) {
value = value.trim()
if (value.length() == 0) {
map[name] = null // have to explicity set to null, not remove
}
else {
map[name] = value // update if trimmed
}
}
else if (value instanceof Map) {
// empty nested param, e.g. "location":["id":""]
convertBlanksToNullsAndTrim value
}
}
}

这是升级到 Grails 3.x 时在拦截器中使用的等效实现(包含类型信息,因此您可以使用 @GrailsCompileStatic ):
boolean before() {
convertBlanksToNullsAndTrim params
true
}

private void convertBlanksToNullsAndTrim(Map<String, Object> map) {
List<String> keys = map.keySet() as List // copy to avoid ConcurrentModificationException
for (String name in keys) {
def value = map[name]
if (value instanceof String) {
value = value.trim()
if (value.length() == 0) {
map[name] = null // have to explicity set to null, not remove
}
else {
map[name] = value // update if trimmed
}
}
else if (value instanceof Map) {
// empty nested param, e.g. "location":["id":""]
convertBlanksToNullsAndTrim value
}
}
}

关于grails - 在 Controller 操作中修剪字符串请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com