从错误的gson视图访问请求路径变量?

时间:2018-11-15 14:37:16

标签: rest grails groovy

我有一个围绕这样的简单用户(grails)域类的RESTful API:

class User{
    Long id
    static constraints = {
    }
}

我还为该用户建立了一个控制器类:

class UserController extends RestfulController {
    static responseFormats = ['json', 'xml']

    UserController() {
        super(User)
    }
}

Grails会为我生成所有“常规Crud终结点”,这很好,但是我想修改一个新的常规404错误,其用户ID可以作为路径变量(资源ID)找到,例如:

www.url/user/3

如果没有ID为3的用户,我想要这个json错误响应:

{"errorMessage":"user 3 not found"}

为此,我修改了404 gson视图:

response.status 404

json {
    message "User ${request.PATHVARIABLE} not found."
    error 404
}

这部分起作用,因为显示了我的自定义json消息,但是我无法在视图上访问path变量,我知道我可以访问请求,但是找不到返回该路径的有效方法该请求中的变量(下面示例中显示的PATHVARIABLE方法只是示例,而不是实际方法)。

我可以通过gson错误视图访问此ID吗?

更新: 在我看来,如果我尝试获取请求uri:

json {
    uri request.uri
    params params
    message "User ${params.id} not found."
    error 404 
}

当我尝试获取不存在于/ user / 123的用户时,这是我的回答:

{
    "uri": "/error",
    "params": {
        "parameterMap": {},
        "empty": true
    },
    "message": "User null not found.",
    "error": 404
}

为什么请求uri是/ error而不是我原来的请求uri?

1 个答案:

答案 0 :(得分:1)

json视图将有一个params对象,因此您可以执行以下操作:

json {
    if (params.id) {
        message "User ${params.id} not found."
    } else {
        message "Not found."
    }
    error 404
}