Получите доступ к переменной пути запроса из представления об ошибке gson? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть RESTful api, построенный вокруг простого класса домена пользователя (grails), подобного этому:

class User{
    Long id
    static constraints = {
    }
}

И я также создал класс контроллера для этого пользователя:

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

    UserController() {
        super(User)
    }
}

Grails генерирует для меня все "обычные конечные точки crud", что приятно, но я хочу изменить обычную ошибку 404 на новую с идентификатором пользователя, который можно найти, например, в качестве переменной пути (идентификатора ресурса) :

www.url/user/3

Если нет пользователя с идентификатором 3, я хочу получить ответ об ошибке json:

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

Для этого я изменил представление 404 гсона:

response.status 404

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

Это частично работает, потому что мое собственное сообщение json отображается, но мне не удается получить доступ к переменной пути в представлении, я знаю, что могу получить доступ к запросу, но я не могу найти действительный метод, который возвращает путь переменная по этому запросу (метод PATHVARIABLE, показанный в примере ниже, это просто пример, а не реальный метод).

Могу ли я как-то получить доступ к этому идентификатору из представления ошибок gson?

UPDATE: на мой взгляд, если я попытаюсь получить запрос 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 запроса / ошибка вместо моего исходного URI запроса?

1 Ответ

0 голосов
/ 15 ноября 2018

Представление json будет иметь объект params, поэтому вы можете сделать:

json {
    if (params.id) {
        message "User ${params.id} not found."
    } else {
        message "Not found."
    }
    error 404
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...