2016-03-04 2 views
2

Я должен принять вход для paper_name и date_of_birth как int и date типа данных соответственно из формы.javax.validation.UnexpectedTypeException: HV000030: Нет валидатор не может быть найден для типа: java.lang.Integer

Ниже приведен код:

<li> Number:<input type="text" name="paper_number" ></li> 
< li>date of birth: <input type="text" name="date_of_birth"></ li> 

У меня есть paperNumber и dateOfBirth переменной в контроллере, как Int и Дата соответственно типы данных.

Пожалуйста, помогите мне изменить тип данных paper_number и date_of_birth из строки в int и дату соответственно.

Я видел другие ответы на stackoverflow, и они использовали jstl для того же, но я не могу понять, как его применять здесь. Код

Контроллер:

@RequestMapping(value = "/student" , params = "add", method = RequestMethod.POST) 
     public String postAddStudent(
        @RequestParam("date_of_birth") Date date, 
        @RequestParam("paper_number") int paperNumber) 

Ниже EntityClass

public class EntityClass extends BaseEntity { 

@Column(name = "DATE_OF_BIRTH", nullable = false) 
    @NotBlank 
    @DateTimeFormat(pattern = "dd-mm-yyyy") 
    private Date dateOfBirth;//TODO 

    @Column(name = "PAPER_NUMBER") 
    private short paperNumber; 
.. 

} 

Ниже журнал

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer. 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
root cause 

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer. 
    org.hibernate.validator.internal.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:394) 
    org.hibernate.validator.internal.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:375) 
    org.hibernate.validator.internal.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:333) 
    org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:155) 
    org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:125) 
    org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303) 
    org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133) 
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:136) 
    org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94) 
    org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:178) 
    org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:75) 
    org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) 
    org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203) 
    org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183) 
    org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167) 
    org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320) 
    org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) 
    org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) 
    org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) 
    org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:71) 
    org.hibernate.event.internal.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:236) 
    org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:216) 
    org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154) 
    org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:910) 
    org.hibernate.internal.SessionImpl.merge(SessionImpl.java:892) 
    org.hibernate.engine.spi.CascadingAction$6.cascade(CascadingAction.java:288) 
    org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380) 
    org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 
    org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208) 
    org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165) 
    org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423) 
    org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:213) 
    org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154) 
    org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76) 
    org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:900) 
    org.hibernate.internal.SessionImpl.merge(SessionImpl.java:884) 
    org.hibernate.internal.SessionImpl.merge(SessionImpl.java:888) 
    org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365) 
    com.sun.proxy.$Proxy41.merge(Unknown Source) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) 
    com.sun.proxy.$Proxy41.merge(Unknown Source) 
    org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:329) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:368) 
    org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:349) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155) 
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    com.sun.proxy.$Proxy53.save(Unknown Source) 
    in.ac.jmi.controllers.AdminController.postAddStudent(AdminController.java:262) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
+0

Вы используете спящий режим в качестве ORM? –

+0

да, добавлен код для него. –

+0

См. Мой [ответ] (http://stackoverflow.com/questions/35792351/input-integer-and-date-data-type-from-jsp/#35793103) –

ответ

4

Надеется, что вы используете проверку в спящем режиме, как это,

@NotBlank 
private Date some; 

@NotBlank для типа String. Отсутствует понятие java.util.Date, являющееся незаполненным. Это может быть пустым или нет пустой .. Используйте @NotNull вместо

@NotNull 
@DateTimeFormat(pattern = "dd-mm-yyyy") 
private Date dateOfBirth; 

См Balus answer и @NotBlank для более подробной информации.

Update

HTTP Status 400: запрос, отправленный клиентом синтаксически некорректным.

Для выше ошибки в дате типа попробуйте добавить @DateTimeFormat аннотацию и указать формат даты вы даете в качестве входных данных (скажем yyyy-mm-dd). Как ниже,

@RequestMapping(value="/fetch" , method=RequestMethod.GET) 
public @ResponseBody String fetchResult(@RequestParam("from") @DateTimeFormat(pattern="yyyy-MM-dd") Date fromDate) { 
    //Content goes here 
} 
+0

Я удалил все проверки спящего режима. и теперь он говорит « description: Запрос, отправленный клиентом, был синтаксически неправильным().» –

+0

Вместо типа 'Date' и' int' попробуйте использовать 'String'. Проблема заключается в том, что контроллер не получает значение как ожидаемый тип. –

+0

Да с строкой это работает ..!, Но я должен использовать int и date в самой форме. –

0

хорошо, если вы не используете какой-либо структуры, как Spring MVC или контроллер, тогда вы должны сделать это сами. Параметр запроса всегда отправляется как строка на сервер. Теперь, может ли какая-либо работа с рамой сделать это до того, как запрос поступит в ваш контроллер как часть вашего перехватчика. В противном случае вам нужно сделать это вручную после получения request.getParameter("param_name")

+0

обновил вопрос –

0

Если вы хотите ограничить ввод, введенный пользователем, вам нужно будет использовать Javascript для ограничения типа ввода (для этого вы можете использовать плагин для проверки правильности jQuery).

Или же, если вы хотите, чтобы преобразовать ввод, введенный пользователем в целое число и дату, в вашей форме действия (сервлетов, возможно), вам нужно будет разобрать целое число, используя

Integer.parseInt(request.getParameter("integer_field_name")); 

как для Дата, используйте SimpleDateFormat API.

Ссылка:

  1. How to convert String to Date
  2. jQuery validator plugin
+0

Да, это можно сделать, но это было бы лучше, если бы jsp сделал бы это для меня. –

0

Я не уверен, но я подозреваю, private short paperNumber; проблема .. Отображение запроса отображения равно Integer, не уверен, как понижая Integer малого междунар работает в спящем режиме.