Как автоматически обрезать параметры запроса в playframework - PullRequest
8 голосов
/ 30 июня 2011

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) content = content.trim();
}

Можно ли как-нибудь автоматически воспроизвести их?

Ответы [ 3 ]

7 голосов
/ 30 июня 2011

Есть несколько способов добиться этого с помощью пользовательских папок. Один из способов сделать это:

  • Определите пользовательское связующее, где обрезается строка
  • Аннотируйте каждый параметр, который хотите обрезать, с помощью @As(binder=TrimmedString.class)

    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);
        }
    }
    

Если это слишком многословно для вас, просто используйте подшивку @Global для String, которая проверяет пользовательскую аннотацию @Trim или @As('trimmed'). TypeBinder уже имеет все доступные аннотации, так что это должно быть очень легко реализовать.

Все это можно найти в документации под Пользовательская привязка .

1 голос
/ 30 июня 2011

Вы можете написать PlayPlugin и обрезать все параметры запроса.

Другой возможностью является использование до перехвата .

1 голос
/ 30 июня 2011

Простой способ сделать это - использовать вместо этого сопоставления объектов, а не отдельные сопоставления String.

Таким образом, вы можете создать вызов класса Article и создать установщик, который обрезает содержимое.Обычно Play не требует от вас создания сеттеров, и они автоматически генерируются за кулисами, но вы все равно можете использовать их, если у вас есть специальная обработка.

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();
    }
}

Затем вам нужно передать статью в свойМетод действия, а не отдельные элементы String и ваши атрибуты будут обрезаны как часть процесса сопоставления объектов.

...