Вот модели:Как настроить сообщение по умолчанию для BigDecimal
public class myFormData {
private BigDecimal trackingNumber;
@Valid
private List<myCustomRecord> records = new ArrayList<myCustomRecord>();
}
public class myCustomRecord {
//the field also appears here (for child records)
private BigDecimal trackingNumber;
}
У меня есть метод контроллера, который принимает этот объект в какой-то момент, чтобы сделать ворота.
public @ResponseBody ValidationResponse save(Model model,
@Valid myFormData formData, BindingResult result,
HttpSession session){
//do stuff
}
Проблема у меня есть, если строка передается в trackingNumber
поле, сообщение об ошибке не приятно.
Не удалось преобразовать значение свойства типа «» java.lang.String к требуемого типа «java.math.BigDecimal» для свойства «записи [0] .trackingNumber»; inested exception is java.lang.NumberFormatException
Не удалось преобразовать значение свойства типа «java.lang.String» в требуемый тип «java.math.BigDecimal» для свойства «trackingNumber»; вложенное исключение - java.lang.NumberFormatException
Еще одно потенциальное осложнение: я не использую форму Spring, так как я пытаюсь выполнить некоторые представления ajax. Это, как я представление данных:
function collectFormData(fields) {
var data = {};
//myFormData
data["trackingNumber"] = <<some value here>>;
for (var i = 0; i < fields.length; i++) {
data["records["+i+"].trackingNumber"] = <<some value>>;
//some more data to submit for child records
}
return data;
}
var mData = collectFormData(aSelectedRows);
if (aSelectedRows.length> 0) {
$.post('call_controller_save', mData, function(response) {
if (response.status === 'FAIL') {
displayError(response);
} else {
//SAVE SUCCESSFUL
$('#successMsgs').append("Data Saved");
}, 'json');
}
Я попытался изменить trackingNumber
«s типа данных String
и написал пользовательские ConstraintValidator<CheckNumeric, String>
. Он делает трюк ... Я могу добавить пользовательское сообщение через ValidationMessages.properties
, но я хотел бы сохранить модели верными для заданного типа данных. Есть ли другой способ управления сообщением об ошибке и превратить его во что-то приятное и удобное для пользователя?
(я также понимаю, что NumberFormatException
, скорее всего, происходит в привязке данных, перед стадией проверки? Но я все еще не уверен, как идти о фиксации сообщения по умолчанию)
Редактировать я использую следующая конфигурация
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<property name="basenames">
<list>
<value>messages</value>
<value>ValidationMessages</value>
</list>
</property>
</bean>
В каждом файле свойств у меня одинаковый контент.
formData.trackingNumber=Invalid format
Но пользовательское сообщение все еще не подбирается. Вопрос 2: Должно ли оно formData
или myFormData
? Я смущаюсь, является ли это имя класса или имя объекта формы, используемого на странице jsp?
Добавлена дополнительная информация выше , В обоих файлах свойств у меня есть 'formData.trackingNumber = Invalid format'. Но я все еще получаю ошибку по умолчанию 'Не удалось преобразовать значение свойства type ...' – user1766760