Как вернуть пользовательский ответ при неудачной проверке в Struts 2

Позвольте мне сначала объяснить, что я делаю:

Я пишу API, который возвращает JSON в случае успеха или неудачи, и в возвращаемом JSON есть переменная status, которая позволяет конечному пользователю узнать, где находится success или failure.

Теперь, если API ожидает отправки некоторых параметров, то если этот параметр является двойным, а отправленное значение является строкой, тогда я должен вернуть JSON с status false и сообщением об ошибке в errorlist.

По умолчанию перехватчики между ними, если не установить String на какое-то Number, возвращают результат Action.INPUT без выполнения метода действия.

Я попытался аннотировать метод с помощью @SkipValidation, но код метода все равно не выполняется, и он возвращает INPUT сразу из перехватчика (я думаю).

Я по умолчанию определил статус как true, затем в методе действия, в зависимости от условий, я устанавливаю его false, если требуется, но поскольку теперь действие никогда не выполняется, возвращенный ответ JSON имеет статус true и errorlist пуст (поскольку действие не выполнялось, что раньше добавляло ошибку в список).

Код действия:

 @SkipValidation
    public String saveFund() {
          //some code which is never executed when Double variable is a string
    return SUCCESS;
}

Используется стек перехватчиков:

<interceptors>
    <interceptor name="nlogin" class="interceptors.AdminInterceptor"/>
    <interceptor-stack name="loginStack">
        <interceptor-ref name="nlogin"/>
        <!--<interceptor-ref name="store">-->
        <!--<param name="operationMode">AUTOMATIC</param>-->
        <!--</interceptor-ref>-->
        <interceptor-ref name="defaultStack"/>
    </interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack"/>

person coding_idiot    schedule 18.12.2013    source источник
comment
Выложи хоть код.   -  person Roman C    schedule 18.12.2013
comment
@RomanC добавил, что используется стек действий и перехватчиков.   -  person coding_idiot    schedule 18.12.2013


Ответы (1)


Если действие не выполняется, это означает, что у вас есть ошибки проверки. validation перехватчик возвращает Action.INPUT результат в этом случае, когда метод проверки завершен если есть.

Итак, вы хотите вернуть JSON в этих обстоятельствах. Чтобы вернуть JSON, вы должны создать результат с именем "input" и ввести "json" и добавить его в конфигурацию действия.

Когда проверка завершена, вы можете использовать метод validate() для настройки результата, результат ввода будет выполнен, и если он имеет тип JSON, будет возвращен ответ JSON.

person Roman C    schedule 18.12.2013
comment
Я уже добавил аннотацию SkipValidation, поэтому действие должно выполняться. Во-вторых, вы хотите сказать, что validate() выполняется любой ценой, верно? Итак, я могу заполнить поля json в validate()? - person coding_idiot; 18.12.2013
comment
validate() выполняется любой ценой, если ни один другой перехватчик (как стандартный, так и ваш) не выдал исключение (или не вернул результат) до перехватчика проверки. - person Andrea Ligios; 18.12.2013
comment
@RomanC да, отвечал на свой комментарий, а не на ваш ответ ... предложение выполняется ЛЮБОЙ ЦЕНОЙ, которую необходимо уточнить - person Andrea Ligios; 18.12.2013