Проверка Spring, как сделать, чтобы PropertyEditor генерировал определенное сообщение об ошибке

Мы можем использовать bind_rows после того, как имена столбцов будут одинаковыми

library(dplyr)
bind_rows(HolidayList, set_names(altSaturdayList, "Holidays"))

Или с rbind

rbind(HolidayList, setNames(altSaturdayList, "Holidays"))
13
задан Steve Kuo 27 March 2009 в 23:17
поделиться

4 ответа

Вы пытаетесь сделать проверку в редакторе связей. Это не цель редактора связей. Редактор связей, как предполагается, связывает параметры запроса с Вашим объектом поддержки, ничто больше. Редактор свойств преобразовывает Строки в объекты и наоборот - он не разработан, чтобы сделать что-либо еще.

Другими словами, необходимо рассмотреть разделение проблем - Вы пробуете к функциональности рожка для обуви в объект, который никогда не предназначался, чтобы сделать что-то большее чем преобразовать строку в объект и наоборот.

Вы могли бы рассмотреть разбивание Вашего объекта SSN в несколько, validateable поля, которые легко связываются (Строковые объекты, основные объекты как Даты, и т.д.). Таким образом, можно использовать блок проверки допустимости после привязки, чтобы проверить, что SSN корректен, или можно установить ошибку непосредственно. С редактором свойств Вы бросаете IllegalArgumentException, Spring преобразовывает его в ошибку несоответствия типов, потому что вот что это значит - строка не соответствует типу, который ожидается. Это - все, что это. Блок проверки допустимости, с другой стороны, может сделать это. Можно использовать пружину, обязывают тег связывать с вложенными полями, пока экземпляр SSN заполняется - он должен быть инициализирован с новым () сначала. Например:

<spring:bind path="ssn.firstNestedField">...</spring:bind>

Если Вы действительно хотите сохраниться на этом пути, однако, имейте свой редактор свойств, сохраняют список ошибок - если он должен бросить IllegalArgumentException, добавьте его к списку и затем бросьте IllegalArgumentException (выгода и повторно бросьте в случае необходимости). Поскольку можно создать редактор свойств в том же потоке как привязка, это будет ориентировано на многопотоковое исполнение при простом переопределении поведения значения по умолчанию редактора свойств - необходимо найти рычаг, который это использует, чтобы сделать, привязка, и переопределять его - делает ту же регистрацию редактора свойств, которую Вы делаете теперь (кроме того же метода, так, чтобы можно было сохранить ссылку на редактора), и затем в конце привязки, можно зарегистрировать ошибки путем получения списка от редактора при обеспечении общедоступного средства доступа. После того как список получен, можно обработать его и добавить ошибки соответственно.

6
ответ дан 2 December 2019 в 00:59
поделиться

Это звучит подобным проблеме, которую я имел с NumberFormatExceptions, когда значение для целочисленного свойства не могло быть связано, если бы, скажем, Строка вводилась в форму. Сообщение об ошибке на форме было универсальным сообщением для того исключения.

Решение состояло в том, чтобы добавить мой собственный пакет ресурса сообщения к моему контексту приложения и добавить мое собственное сообщение об ошибке для несоответствий типов на том свойстве. Возможно, можно сделать что-то подобное для IllegalArgumentExceptions на определенном поле.

0
ответ дан 2 December 2019 в 00:59
поделиться

Как сказано:

Я хочу, чтобы сообщение об ошибке , созданное PropertyEditor , отображалось в сообщении об ошибке в форме Spring

За кулисами Spring MVC использует стратегию BindingErrorProcessor для обработки ошибок отсутствующих полей и для преобразования PropertyAccessException в FieldError . Поэтому, если вы хотите переопределить стратегию BindingErrorProcessor Spring MVC по умолчанию, вы должны предоставить стратегию BindingErrorProcessor в соответствии с:

public class CustomBindingErrorProcessor implements DefaultBindingErrorProcessor {

    public void processMissingFieldError(String missingField, BindException errors) {
        super.processMissingFieldError(missingField, errors);
    }

    public void processPropertyAccessException(PropertyAccessException accessException, BindException errors) {
        if(accessException.getCause() instanceof IllegalArgumentException)
            errors.rejectValue(accessException.getPropertyChangeEvent().getPropertyName(), "<SOME_SPECIFIC_CODE_IF_YOU_WANT>", accessException.getCause().getMessage());
        else
            defaultSpringBindingErrorProcessor.processPropertyAccessException(accessException, errors);
    }

}

Чтобы протестировать, давайте сделаем следующее.

5
ответ дан 2 December 2019 в 00:59
поделиться

Я думаю, вы могли бы просто попытаться поместить это в свой источник сообщения:

typeMismatch.person.ssn = Неверный формат SSN

0
ответ дан 2 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: