2010-07-02 6 views
4

새로운 스프링 MVC 3.0 타입 변환 프레임 워크를 사용해 보았습니다. 변환 오류를 잡는 방법을 찾을 수 없습니다.스프링 3 타입 변환 에러

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

    <!-- Scan this package and sub-packages for Annotated Controllers --> 
    <context:component-scan base-package="springmvc.simple"/>    

    <!-- New Spring 3.0 tag to enable new Converter and Formatting Frameworks -->    
    <mvc:annotation-driven/> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

    </beans> 

그리고 간단한 명령 클래스 :

public class Amount { 

@NumberFormat(style=Style.CURRENCY) 
@Min(0) 
private BigDecimal amount = BigDecimal.valueOf(10000, 2); 

@DateTimeFormat(iso=ISO.DATE) 
private Date date = new Date(); 

public Date getDate() { 
    return date; 
} 

public BigDecimal getAmount() { 
    return amount; 
} 

} 

그리고 똑같이 간단한 컨트롤러 : 나는 새로운 MVC 스키마를 사용하고

@Controller 
@RequestMapping(value="/addVat.html") 
public class AddVatController { 

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.initDirectFieldAccess(); 
    } 

@RequestMapping(method = RequestMethod.GET) 
public String setupForm(Model model) { 
    model.addAttribute("commandBean", new Amount()); 
    return "addVatForm"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String onSubmit(@ModelAttribute("commandBean") @Valid Amount commandBean, BindingResult amountBinding, Model model) { 

    if (amountBinding.hasErrors()) { 
    return "addVatForm"; 
    } 

    BigDecimal result = commandBean.getAmount().multiply(new BigDecimal("1.175")); 
    model.addAttribute("result", result); 

    return "result"; 
} 
} 

이 잘 작동 - I BigDecimal에 음수 값을 입력하면 my result.jsp에 유효성 검사 오류가 발생합니다. - 나는 ####을 준수하지 않는 날짜와 같은 2010-07-024, 보내려고하지만 경우 ####을, 나는 오류 얻을 : 괜찮

org.springframework.core.convert.ConversionFailedException: Unable to convert value 2010-07-024 from type 'java.lang.String' to type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value 2010-07-024 from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException: Invalid format: "2010-07-024" is malformed at "4" 
org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:40) 
org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:135) 
org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199) 
org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:169) 
org.springframework.beans.DirectFieldAccessor.setPropertyValue(DirectFieldAccessor.java:125) 
org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:50) 
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) 
org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:665) 
org.springframework.validation.DataBinder.doBind(DataBinder.java:561) 
org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:190) 
org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:110) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.doBind(AnnotationMethodHandlerAdapter.java:696) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:744) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:296) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:163) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

을 -하지만 어떻게 오류를 잡아낼 수 있습니까? BindingResult에 단순히 다른 오류가 포함될 것으로 예상 했습니까? 유르겐 Hoeller에 따르면

답변

0

,이 봄 확실히 오류가 멀리 갈 수 3.0.2

2
적절한 DateEditor을 등록하는 것은 당신을 도울 수 있는지 확인

..... 15.3.2.12

@InitBinder 
    public void initBinder(WebDataBinder binder) { 
     binder.initDirectFieldAccess(); 
     **/* register appropriate date editor */** 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     dateFormat.setLenient(false); 
     binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); 
    } 
+1

수정되었습니다 -하지만 Spring 3의 핵심은 Property Editors가 '오래된 모자'였고 새로운 ConverterFramework (JodaTime을 사용함)가 @DateTimeFormat (iso = ISO.DATE) 주석에 따라이 작업을 수행해야한다고 생각했습니다. ? –