2015-04-02 5 views
0

Когда я вводил алфавиты, такие как «adsf» в поле ввода, пружина пытается привязать его к моей цене (двойному) свойству моего объекта «Код», и это вызывает исключение связывания. Что я могу сделать, чтобы избежать этой ошибки, если бы я хотел сохранить поле как двойное?Несоответствие типов, Spring BindException

POJO

@entity 
@Table(name=“CODE”) 
public class Code{ 

    @Column(name=“PRICE”) 
    @NotNull 
    @DecimalMax(value=“999999999999.999999”) 
    @DemimalMin(value=“0.0”) 
    private Double price; 

    //getters and setters 

} 

Мой контроллер

@RequestMapping(value=“validateField”, method=RequestMethod.POST, produces=“application/json”) 
public FieldValidatinResult validateField(final Code code, final String field){ 
    //return statement 
} 

HTML страницы сообщение

<input type=“text” class=“form-control validatable” id=“price”></input> 

Ошибка:

Field error in object ‘code’ on field ‘price’: rejected value [adsf]; 
codes[typeMismatch.code.price,typeMismatch.price,typeMismatch.java.lang.Double,typeMismatch]; arguments[org.springframework.context.support.DefaultMessageSourceResolvable: 
codes [code.price,price]; arguments []; default message [price]]; default message 
[Failed to convert property value of type 'java.lang.String' to required type 
'java.lang.Double' for property 'price'; nested exception is 
java.lang.NumberFormatException: For input string: "adsf"] 
+0

вы должны поставить проверку на стороне клиента. он не позволит вставлять ничего, кроме цифр. – Pratik

+0

улавливать 'NumberFormatException'? –

ответ

1

Ошибка ясно говорит

[Не удалось преобразовать значение свойства типа «java.lang.String» для требуемого типа «java.lang.Double» для свойства «цены»; вложенное исключение составляет java.lang.NumberFormatException: Для входной строки: «adsf»]

Пользователя предоставил вход нон номера и, когда он обрабатывается как двойные на сервере он бросает NumberFormatException. Лучший способ решить эту проблему - обращаться с ней на стороне клиента. Добавление проверки, как показано ниже перед отправкой формы

if (!isNaN(parseInt($("#price").val()))) { 
    //proceed with form submit 
} 
1

Я бы не сказал, что валидация на стороне клиента, является «лучшим», как их можно легко избежать (взять action URL из формы, разместить некоторое количество мусора), но его, вероятно, проще всего сделать.

Я бы рекомендовал добавить валидацию также на стороне сервера. У вас есть готовые аннотации, теперь вы должны использовать @Valid на своих Code code и BindingResult параметрах. http://codetutr.com/2013/05/28/spring-mvc-form-validation/ < - это, кажется, полезный учебник.

Смежные вопросы