Не уверен, что вы имеете в виду под «компонентом запроса».
В любом случае перехватчик, вероятно, лучшая ставка, поскольку у вас есть доступ к карте параметров.Если ваши фактические параметры вложены в bean-компонент, который не имеет доступа, подобного карте, вам все равно нужно отразить.
Это одна из причин, почему я рассматриваю S2 как тонкий слой между сетью ибизнес-логика: я не склонен предварительно оптимизировать то, что отправляется бизнес-логике, поэтому я могу обеспечить фильтрацию на веб-уровне для подобных ситуаций (например, фильтр обрезки пробелов может применяться во всем приложении).
Перехватчик обрезки выглядит примерно так (начиная с Struts 2.1):
public class TrimInterceptor extends MethodFilterInterceptor {
private List<String> excluded = new ArrayList<String>();
protected String doIntercept(ActionInvocation invocation) throws Exception {
Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
for (String param : parameters.keySet()) {
if (isIncluded(param)) {
String[] vals = (String[]) parameters.get(param);
for (int i = 0; i < vals.length; i++) {
vals[i] = vals[i].trim();
}
}
}
return invocation.invoke();
}
private boolean isIncluded(String param) {
for (String exclude : excluded) {
if (param.startsWith(exclude)) {
return false;
}
}
return true;
}
public void setExcludedParams(String excludedParams) {
for (String s : StringUtils.split(excludedParams, ",")) {
excluded.add(s.trim());
}
}
}
Там есть немного дополнительного кода, но в первую очередь вам нужно найти значения параметров:
String[] vals = (String[]) parameters.get(param);
Если это Балтика, вы делаете с ней все, что вам нужно, и возвращаете ей значение:
vals[i] = vals[i].trim();
Здесь вырезаются пробелы, но вы получаетеидея.
Вероятно, сейчас есть несколько отличий (это относится к эпохе Struts 2.1), но этого должно быть достаточно, чтобы помочь вам.