播放2 Framework控制器查询参数验证

时间:2014-08-07 07:37:28

标签: validation playframework playframework-2.2

亲爱的Playframework用户。

我已经切换到播放框架2.2,我对验证有疑问。我希望有人能指出我正确的方向。

我有一个控制器来获取一个集合。

GET        /country  controllers.api.CountryController.list(fetchInactive: Int ?= 0, sortBy: String ?= "name", sortDir: String ?= "asc" )

public static Result list( int fetchInactive, String sortBy, String sortDir)

它工作得很好,虽然我想限制可以作为sortBy字段指令发送的可能值。

E.g。元素列表。比如'name','id'等。 在游戏1中,验证控制器参数非常容易。见Play Framework: automatic validation of controller methods applied?

我知道如何将JSR-303与模型一起使用,虽然这是一个API,我想验证各个参数。

有人可以给我一个提示或示例我是如何实现这一目标的吗?

我想使用注释来定义我自己的验证器来验证sortBy只接受某些字符串值。

提前致谢,

1 个答案:

答案 0 :(得分:0)

实际上在这种情况下,如果用户提供超出允许范围的内容,您应该使用sortBysortDir的默认值,您可以在操作中轻松完成(不需要使用)验证器)

public static Result list(Integer fetchInactive, String sortBy, String sortDir) {
    Integer resolvedFetchInactive
            = (fetchInactive != null && Arrays.asList(0, 1, 2).contains(fetchInactive)) ? fetchInactive : 0;

    String resolvedSortBy
            = (sortBy != null && Arrays.asList("name", "id").contains(sortBy)) ? sortBy : "name";

    String resolvedSortDir
            = (sortDir != null && Arrays.asList("asc", "desc").contains(sortDir)) ? sortDir : "asc";

    if (!resolvedSortBy.equals(sortBy) || !resolvedSortDir.equals(sortDir) || !resolvedFetchInactive.equals(fetchInactive)) {
        //redirect to the same list with allowed values
        return redirect(routes.Application.list(resolvedFetchInactive, resolvedSortBy, resolvedSortDir));
    }

    return ok("You're going to display list sorted by: " + resolvedSortBy + " " + resolvedSortDir + ", fetchInactive is: " + resolvedFetchInactive);
}