如何在playframework中自动修剪请求参数
Play会将参数从请求分配到动作参数,如:如何在playframework中自动修剪请求参数,playframework,trim,Playframework,Trim,Play会将参数从请求分配到动作参数,如: public static void createArticle(String title, String content) { } 但它不会修剪它们,因此我们通常在操作中使用此类代码: public static void createArticle(String title, String content) { if(title!=null) title = title.trim(); if(content!=null) cont
public static void createArticle(String title, String content) {
}
但它不会修剪它们,因此我们通常在操作中使用此类代码:
public static void createArticle(String title, String content) {
if(title!=null) title = title.trim();
if(content!=null) content = content.trim();
}
有没有办法让play自动修剪它们?一个简单的方法是使用对象映射,而不是单个字符串映射 因此,您可以创建一个类调用文章,并创建一个裁剪内容的setter。通常情况下,Play不需要您创建setter,它们在后台自动生成,但如果您有特殊处理,您仍然可以使用它们
public class Article {
public String title;
public String content;
public void setTitle(String title) {
this.title = title.trim();
}
public void setContent(String content) {
this.content = content.trim();
}
}
然后,您需要将文章传递到操作方法中,而不是单个字符串元素,并且在对象映射过程中,您的属性将被修剪。有多种方法可以通过自定义绑定实现这一点。 一种方法是:
- 定义用于修剪字符串的acustom活页夹
- 将要修剪的每个参数注释为(binder=TrimmedString.class)
公共类应用程序扩展控制器{ 公共静态类TrimmedString实现了TypeBinder{ @凌驾 公共对象绑定(字符串名称、注释[]注释、字符串值、类actualClass、类型genericType)引发异常{ if(值!=null){ value=value.trim(); } 返回值; } } 公共静态空隙指数( @As(binder=TrimmedString.class)字符串s1, @As(binder=TrimmedString.class)字符串s2, @As(binder=TrimmedString.class)字符串s3){ 渲染(s1、s2、s3); } }
@Global
活页夹,检查自定义@Trim
或@As('trimmed')
注释。TypeBinder已经有了所有可用的注释,所以这应该很容易实现
所有这些都可以在下的文档中找到。您可以编写一个命令并修剪请求的所有参数
另一种可能是使用。这是可行的,但不是我所期望的。我必须以这种方式向模型中添加许多方法。希望有更简单的方法。但是谢谢你,你唯一的选择就是创建你自己的活页夹。一个新的答案显示了如何做到这一点,或者看看
@Before
不能在这里使用,因为您无法在“Before”方法中获取其他操作的参数。@Freewind:应该可用。谢谢,在操作之前在全局范围内修剪所有参数是最简单的方法。这很有帮助,谢谢。但是我们需要为每个字段添加注释,这很不方便。如果您真的想修剪所有字符串,只需在TypeBinder上使用@Global并修剪所有字符串。我稍后会尝试,然后确定最佳答案:)TypeBinder正是为此目的而设计的,因此我更喜欢它而不是@Before解决方案。在@Before中正确地实现这一点对我来说似乎相当复杂。您不知道参数将在操作中使用的类型。某些类型可能依赖于前导/尾随空格。
public class Application extends Controller {
public static class TrimmedString implements TypeBinder<String> {
@Override
public Object bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) throws Exception {
if(value != null) {
value = value.trim();
}
return value;
}
}
public static void index(
@As(binder=TrimmedString.class) String s1,
@As(binder=TrimmedString.class) String s2,
@As(binder=TrimmedString.class) String s3) {
render(s1, s2, s3);
}
}