2016-03-04 66 views
2

我必須輸入paper_namedate_of_birth作爲intdate數據類型分別從窗體。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和在控制器分別int和日期數據類型dateOfBirth變量。

請幫助我將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

您是否使用hibernate作爲ORM? –

+0

是的,添加了相同的代碼。 –

+0

看到我[回答](http://stackoverflow.com/questions/35792351/input-integer-and-date-data-type-from-jsp/#35793103) –

回答

4

希望你在這樣的休眠使用驗證,

@NotBlank 
private Date some; 

@NotBlank是字符串類型。沒有java.util.Date空白的概念。它可以爲空或不爲空..使用@NotNull代替,

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

詳情請參閱Balus answer@NotBlank

更新

HTTP狀態400:由客戶端發送的請求是語法不正確。

對於Date類型上面的錯誤嘗試添加@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

我已經刪除了所有的休眠驗證。現在它說「 描述:客戶端發送的請求在語法上不正確()。」 –

+0

而不是'Date'和'int'類型嘗試'String'類型。問題是控制器沒有得到預期類型的​​值。 –

+0

是與字符串它工作..!,但我必須使用int和日期形式本身。 –

0

好,如果你沒有使用像Spring MVC的或控制的任何框架,那麼你必須做你自己。請求參數總是作爲字符串發送到服務器端。現在,在請求到達控制器之前,作爲攔截器的一部分,是否可以執行某些框架工作。否則,你獲得request.getParameter("param_name")

+0

更新了問題 –

0

如果要限制由用戶輸入的輸入後手動做到這一點,你將不得不使用JavaScript來限制輸入類型(您可以使用此jQuery的驗證插件)。

否則,如果你想通過用戶輸入的輸入轉換爲整數和日期,在您的表單動作(servlet中,也許),你需要解析使用

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;的問題..請求映射映射到相同的整數,不知道如何在休眠降級整數小INT工作。

相關問題